Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:算法基础打开算法之门 编辑:程序博客网 时间:2024/06/06 12:57
-----QUESTION-----

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

-----SOLUTION-----
class Solution {public:    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        root = NULL;        if(inorder.empty()) return root;        root = new TreeNode(0);        buildSubTree(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1,root);        return root;            }    void buildSubTree(vector<int> &preorder, vector<int> &inorder, int preStartPos, int preEndPos,int inStartPos, int inEndPos, TreeNode * currentNode)    {        currentNode->val = preorder[preStartPos];                //find root position in inorder vector        int inRootPos;        for(int i = inStartPos; i <= inEndPos; i++)        {            if(inorder[i] == preorder[preStartPos])            {                inRootPos = i;                break;            }        }                //left tree        int newPrePos = preStartPos+max(inRootPos-inStartPos, 0);        if(inRootPos>inStartPos)        {            currentNode->left = new TreeNode(0);            buildSubTree(preorder,inorder,preStartPos+1, newPrePos,inStartPos,inRootPos-1,currentNode->left);        }        //right Tree        if(inRootPos < inEndPos)        {            currentNode->right = new TreeNode(0);            buildSubTree(preorder,inorder,newPrePos+1, preEndPos,inRootPos+1,inEndPos,currentNode->right);                  }         }private:    TreeNode* root;};

0 0
原创粉丝点击