[Leetcode 106, Medium] Construct Binary Tree from Inorder and Postorder Traversal

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

Problem:

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


Python:

0 0