输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
示例1
输入:
[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
复制返回值:
{1,2,5,3,4,6,7}

我的答案:前序遍历和中序遍历可以唯一确定一颗二叉树,利用二叉树的基础知识,调用递归依次构建
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int start=0,end=vin.size()-1;
if(end<=-1){
return nullptr;
}else{
int index=0;
return Build(start,end,pre,vin,&index);
}
}
TreeNode* Build(int left,int right,vector<int>& pre,vector<int> vin,int* ind) {
if (left > right) {
return nullptr;
}
int num = pre[(*ind)++];
TreeNode *node = new TreeNode(num);
if (left == right) {
return node;
} else {
int index = left;
while (index <= right) {
if (vin[index] == num) {
node->left = Build(left, index - 1, pre, vin,ind);
node->right = Build(index + 1, right, pre, vin,ind);
break;
} else {
index++;
}
}
return node;
}
}
};

博客围绕根据二叉树的前序遍历和中序遍历结果重建二叉树展开。指出输入的前序和中序遍历结果不含重复数字,如给定特定序列可重建二叉树,还提到利用二叉树基础知识,通过递归依次构建。
1024

被折叠的 条评论
为什么被折叠?



