Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal

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

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

 

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

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


相關文章