Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal

關關的刷題日記發表於2018-01-10

給出二叉樹的後根遍歷和中根遍歷,構造二叉樹。

 

瞭解後根遍歷和中根遍歷的特點。

 

每次在後根遍歷陣列中最右邊就是二叉樹的根,然後去中根遍歷陣列中找到根,根左邊的就是左子樹,根右邊的就是右子樹,對於左子樹和右子樹採取同樣的求法:去後根遍歷陣列中找根,利用中根遍歷陣列劃分左右子樹,遞迴求解。

class Solution {
public:
    TreeNode* help(vector<int>& postorder,int l1, int r1, vector<int>& inorder, int l2, int r2)
    {
        if(l1>r1)
            return nullptr;
        else
        {
            int i;
            TreeNode* root=new TreeNode(postorder[r1]);
            for(i=l2; i<=r2; ++i)
            {
                if(inorder[i]==postorder[r1])
                    break;
            }
            root->left=help(postorder,l1, l1+i-1-l2, inorder, l2, i-1);
            root->right=help(postorder,l1+i-l2, r1-1, inorder, i+1, r2);
            return root;             
        }   
    }
    
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
         return help(postorder, 0, postorder.size()-1,inorder, 0, inorder.size()-1);
    }
};


相關文章