LeetCode: Construct Binary Tree from Inorder and Postorder Traversal 解题报告
2015-01-03 16:36
417 查看
Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree.Note:
You may assume that duplicates do not exist in the tree.
Hide Tags
Tree Array Depth-first Search
SOLUTION 1:
使用递归的思想,先找到根节点(它就是post order最后一个),然后再在inorder中找到它,以确定左子树的node个数。然后分别确定左子树右子树的左右边界
例子:
{4, 5, 2, 7, 8, 1, 3}这树的
inorder: 7 5 8 | 4 | 1 2 3
post: 7 8 5 | 1 3 2 | 4
以上我们可以看到左右子树的划分关系。
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if (inorder == null || postorder == null) { return null; } return dfs(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1); } public TreeNode dfs(int[] inorder, int[] postorder, int inL, int inR, int postL, int postR) { if (inL > inR) { return null; } // create the root node. TreeNode root = new TreeNode(postorder[postR]); // find the position of the root node in the inorder traversal. int pos = 0; for (; pos <= inR; pos++) { if (inorder[pos] == postorder[postR]) { break; } } int leftNum = pos - inL; root.left = dfs(inorder, postorder, inL, pos - 1, postL, postL + leftNum - 1); root.right = dfs(inorder, postorder, pos + 1, inR, postL + leftNum, postR - 1); return root; } }
View Code
代码: https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/BuildTree2.java
相关文章推荐
- 【LeetCode】Construct Binary Tree from Inorder and Postorder Traversal 解题报告
- [leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告
- [Leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告
- 剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
- [leetcode]106. Construct Binary Tree from Inorder and Postorder Traversal@Java结题报告
- [leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 先序和中序中恢复二叉树 解题报告
- 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- [leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal@Java解题报告
- [Leetcode] 105. Construct Binary Tree from Preorder and Inorder 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] 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 -- Construct Binary Tree from Inorder and Postorder Traversal