leetcode_105.从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:
    3
    / \
  9  20
      /  \
   15   7

解析:
从前序遍历的定义可知,preorder序列的第一个元素便是树的根。之后从中序遍历序列中找到这个元素,它之前的元素组成根节点的左子树,之后的元素组成右子树。对于左右子树递归进行重复的步骤即可。

class Solution {
    TreeNode* helper(vector<int> &preorder, vector<int> &inorder, int begin, int end){
        if(begin>=end || pos>=preorder.size()) 
            return nullptr;
        TreeNode *r=new TreeNode(preorder[pos]);
        pos++;
        int cur=0;
        for(cur=begin;cur<end;cur++)
        {
            if(inorder[cur]==r->val)
                break;
        }
        r->left=helper(preorder,inorder,begin,cur);
        r->right=helper(preorder,inorder,cur+1,end);
        return r;
    }
public:
    int pos=0;
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return helper(preorder,inorder,0,inorder.size());
    }
};
发布了112 篇原创文章 · 获赞 0 · 访问量 346

猜你喜欢

转载自blog.csdn.net/qq_37292201/article/details/103956684