先序遍历&中序遍历
递归做法:
递归做法比较容易理解,先在先序遍历中确定第一个点,这个点一定是根节点,然后在中序遍历中找到这个点的位置,那么这个位置之前的都是左子树,后边的都是右子树,然后分别递归。
class Solution {
public:
int start = 0;
TreeNode* build(vector<int>& pre,vector<int>& in, int ps,int pe, int is, int ie){
if (ps>=pe)
return NULL;
int val = pre[ps];
TreeNode* root = new TreeNode(val);
int pos;
for (int i=is;i<ie;i++){
if (in[i]==val) {
pos=i;
break;
}
}
root->left = build(pre,in,ps+1,ps+pos-is+1,is,pos);
root->right= build(pre,in,pe-ie+pos+1,pe,pos+1,ie);
return root;
}
TreeNode* buildTree(vector<int

本文介绍了如何通过先序遍历和中序遍历确定二叉树结构,详细阐述了递归和非递归两种方法。递归方法直观,通过先序找到根节点,在中序中确定左右子树。非递归方法利用栈保存已访问节点,根据中序遍历判断后续节点。此外,还讨论了中序遍历与后序遍历的类似处理方式。
最低0.47元/天 解锁文章
36万+





