[Leetcode 105, Medium] Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:cad画网络拓扑结构图 编辑:程序博客网 时间:2024/06/06 00:07

Problem:

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

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

Analysis:


Solutions:

C++:

    void BuildTreeAux(TreeNode *&root, vector<int>& preorder, int p_start, int p_end,                                       vector<int>& inorder, int i_start, int i_end)    {        root = new TreeNode(preorder[p_start]);        if(p_start == p_end)            return;        int index_value_inorder = i_start;        for(; index_value_inorder <= i_end; ++index_value_inorder) {            if(inorder[index_value_inorder] == preorder[p_start])                break;        }                if(index_value_inorder > i_start) {            int sub_preorder_size = index_value_inorder - i_start;            BuildTreeAux(root->left, preorder, p_start + 1, p_start + sub_preorder_size,                                      inorder, i_start, i_start + sub_preorder_size - 1);        }        if(index_value_inorder < i_end) {            int sub_preorder_size = i_end - index_value_inorder;            BuildTreeAux(root->right, preorder, p_end - sub_preorder_size + 1, p_end,                                      inorder, index_value_inorder + 1, i_end);        }    }    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {        TreeNode *p_root = NULL;        if(preorder.empty() || preorder.size() != inorder.size())            return NULL;        BuildTreeAux(p_root, preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);        return p_root;    }
Java:


Python:

0 0
原创粉丝点击