
//重建二叉树
//根据二叉树的前序遍历序列和中序遍历序列,重建该二叉树,并返回根节点
//两个遍历都没有重复的元素
/step 1:先根据前序遍历第一个点建立根节点。
step 2:然后遍历中序遍历找到根节点在数组中的位置。
step 3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。
step 4:直到子树的序列长度为0,结束递归/
TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
int n = pre.size();
int m = vin.size();
if (n == 0 || m == 0)return NULL;
TreeNode* root = new TreeNode(pre[0]);
for (int i = 0; i < vin.size(); i++) {
if (pre[0] == vin[i]) {
vector<int> leftpre(begin(pre) + 1, begin(pre) + i + 1);
vector<int> leftvin(begin(vin), begin(vin) + i);
root->left = reConstructBinaryTree(leftpre, leftvin);
vector<int> rightpre(begin(pre) + i + 1, end(pre));
vector<int> rightvin(begin(vin) + i + 1, end(vin));
root->right = reConstructBinaryTree(rightpre, rightvin);
break;
}
}
return root;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)