Leetcode 106. 从中序与后序遍历序列构造二叉树 C++

Leetcode 106. 从中序与后序遍历序列构造二叉树

题目

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

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

测试样例

中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7

题解

和105题思路一致,只不过根节点的确定是由后序序列的最后一个确定。

代码

TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(postorder.empty())    return nullptr;
        int post = postorder.size()-1;		//后序序列的最后一个元素为根节点
        TreeNode *root = new TreeNode(postorder[post]);		
        int i,n=inorder.size();
        for(i=0; i<n; i++)  	//确定左子树和右子树的范围
            if(inorder[i]==postorder[post]) break;
        vector<int> left(postorder.begin(),postorder.begin()+i);
        vector<int> right(postorder.begin()+i,postorder.end()-1);
        vector<int> leftIn(inorder.begin(),inorder.begin()+i);
        vector<int> rightIn(inorder.begin()+i+1,inorder.end());
        root->left = buildTree(leftIn,left);
        root->right = buildTree(rightIn,right);
        return root;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode 106. 从中序与后序遍历序列构造二叉树 C++)