[LeetCode] 020: Construct Binary Tree from Inorder and Postorder Traversal
2017-09-10 20:48
405 查看
[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.
[Solution]
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
[Solution]
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: // search x in array[begin:end] int search(vector<int> &array, int begin, int end, int x){ for(int i = begin; i <= end; ++i){ if(array[i] == x)return i; } return -1; } // build tree with inorder[begin1:end1] and postorder[begin2:end2] TreeNode *buildTree(vector<int> &inorder, int begin1, int end1, vector<int> &postorder, int begin2, int end2){ // invalid if(begin1 > end1 || begin2 > end2 || end1 - begin1 != end2 - begin2){ return NULL; } if(begin1 == end1){ // invalid if(inorder[begin1] != postorder[begin2]){ return NULL; } return new TreeNode(inorder[begin1]); } // search the root in the inorder int mid = search(inorder, begin1, end1, postorder[end2]); if(mid == -1) return NULL; // build the left brunch TreeNode *left = buildTree(inorder, begin1, mid-1, postorder, begin2, begin2 + (mid - begin1) - 1); // build the right brunch TreeNode *right = buildTree(inorder, mid+1, end1, postorder, begin2 + (mid - begin1), end2 - 1); // set the left brunch and the right brunch TreeNode *root = new TreeNode(postorder[end2]); root->left = left; root->right = right; return root; } // build tree with inorder and postorder TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { // Start typing your C/C++ solution below // DO NOT write int main() function return buildTree(inorder, 0, inorder.size()-1, postorder, 0, postorder.size()-1); } };说明:版权所有,转载请注明出处。Coder007的博客
相关文章推荐
- LeetCode--Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode(Construct Binary Tree from Inorder and Postorder Traversal)根据二叉树的中序和后续构造二叉树
- [leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal
- Construct Binary Tree from Inorder and Postorder Traversal || LeetCode
- LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal
- leetcode[105] Construct Binary Tree from Inorder and Postorder Traversal
- leetcode - Construct Binary Tree from Inorder and Postorder Traversal
- 【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
- 【leetcode】Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-106:Construct Binary Tree from Inorder and Postorder Traversal (利用中序和后序遍历构建二叉树) -- medium
- leetcode--Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- leetcode -day23 Construct Binary Tree from Inorder and Postorder Traversal & Construct Binary Tree f
- LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal
- leetcode--Construct Binary Tree from Inorder and Postorder Traversal
- leetcode:Construct Binary Tree from Inorder and Postorder Traversal
- leetcode题解-105 && 106. Construct Binary Tree from Preorder (PostOrder) and Inorder Traversal
- 【Leetcode】Construct Binary Tree from Inorder and Postorder Traversal