LeetCode(Construct Binary Tree from Preorder and Inorder Traversal )根据二叉树的中序遍历和后序遍历重建二叉树

来源:互联网 发布:java怎么判断质数 编辑:程序博客网 时间:2024/06/05 06:03

题目要求:

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

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

代码:

TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        if (!preorder.size() || !inorder.size() ||preorder.size() != inorder.size() ) {            return NULL;        }        TreeNode* root = constructTree(preorder, 0, preorder.size() - 1,                                       inorder, 0, inorder.size() - 1);        return root;    }        TreeNode* constructTree(vector<int>& preorder, int pre_start, int pre_end,                            vector<int>& inorder, int in_start, int in_end)    {        int root_value = preorder[pre_start];        TreeNode* root = new TreeNode(root_value);        if(pre_start == pre_end)        {            if(in_start == in_end && preorder[pre_start] == inorder[in_start])                return root;            else            {                throw ("Invalid Input.");            }        }        int root_in_idx = in_start;        while (root_in_idx <= in_end && inorder[root_in_idx] != root_value) {            ++root_in_idx;        }        if(root_in_idx == in_end && inorder[root_in_idx] != root_value)            throw ("Invalid Input.");        int left_len = root_in_idx - in_start;        int left_pre_end = pre_start + left_len;        if(left_len > 0)            root->left = constructTree(preorder, pre_start + 1, left_pre_end,                                       inorder, in_start, root_in_idx - 1);        if(left_len < (pre_end - pre_start))            root->right = constructTree(preorder, left_pre_end + 1, pre_end,                                        inorder, root_in_idx + 1, in_end);        return root;    }




0 0
原创粉丝点击