leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal-递归
来源:互联网 发布:我怎样解题 知乎 编辑:程序博客网 时间:2024/06/03 18:45
原题链接:106. Construct Binary Tree from Inorder and Postorder Traversal相似博文:105. Construct Binary Tree from Preorder and Inorder Traversal | Java最短代码实现
【思路-Java】
本题考查根据中序遍历和后序遍历构造二叉树。其基本思路,就是找到后序遍历的最后一个数的值,然后在中序遍历中找到这个值。以这个值作为根,将中序遍历划分为左、右子树序列——前边的序列为左子树的中序遍历,后边的序列为右子树的中序遍历。照此递归左右子树:
public TreeNode buildTree(int[] inorder, int[] postorder) { return createTree(inorder, 0, postorder.length - 1, postorder, postorder.length - 1); } private TreeNode createTree(int[] inorder, int inBeg, int inEnd, int[] postorder, int postIndex) { if (postIndex < 0) return null; int mid = 0; for (int i = inBeg; i <= inEnd; i++) if (inorder[i] == postorder[postIndex]) { mid = i; break; } TreeNode root = new TreeNode(inorder[mid]); if (mid - inBeg > 0) //判断左子树节点数是否大于0。下面的postIndex - (inEnd - mid) - 1代表左子树的根节点在postorder中的下标 root.left = createTree(inorder, inBeg, mid - 1, postorder, postIndex - (inEnd - mid) - 1); if (inEnd - mid > 0) //判断右子树节点数是否大于0。下面的<span style="font-family: Arial, Helvetica, sans-serif;">postIndex - 1代表右子树的根节点在postorder中的下标</span> root.right = createTree(inorder, mid + 1, inEnd, postorder, postIndex - 1); return root; }202 / 202 test cases passed. Runtime: 21 ms Your runtime beats 17.86% of javasubmissions.
【优化】
其实对于上面的思路,在搜寻时,我们用 hashmap 存储 inorder 的值和下标,这样效率会提高很多:
public class Solution { private HashMap<Integer, Integer> hm = new HashMap<>(); public TreeNode buildTree(int[] inorder, int[] postorder) { for(int i = 0; i < inorder.length; i++) hm.put(inorder[i], i); return createTree(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1); } private TreeNode createTree(int[] inorder,int istart,int iend, int[] postorder, int pstart, int pend) { if(pstart > pend) return null; int imid = hm.get(postorder[pend]); TreeNode root = new TreeNode(postorder[pend]); root.left = createTree(inorder, istart, imid-1, postorder, pstart, pend-1-(iend-imid)); root.right = createTree(inorder, imid+1, iend, postorder, pstart+imid-istart, pend-1); return root; }}202 / 202 test cases passed. Runtime: 5 ms Your runtime beats 76.10% of javasubmissions.
1 0
- LeetCode 106. 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
- [LeetCode]*106.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
- LeetCode#106. 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
- 【leetcode】106. 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
- LeetCode - 106. 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
- [leetcode]106. 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
- 关于公示编辑器写的公式在word文档中位置总是偏上解决办法。
- C++中一个关于复制构造函数和指针的问题
- apk签名过程
- Android工程师进阶之路 :《Android开发进阶:从小工到专家》上市啦!
- win8以上怎么通过本地账户使用远程桌面连接
- leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal-递归
- 第2讲 示例2—长方体
- 单例模式
- Lombok 安装、入门 - 消除冗长的 java 代码
- 多线程之ThreadLocal理解、应用及源码分析
- 读书与赚钱----读书也是件奢侈的事情
- int ,long,long long 的范围
- iOS静态库
- Kafka 架构原理、应用场景