106. Construct Binary Tree from Inorder and Postorder Travers
来源:互联网 发布:淘宝美工如何接私活 编辑:程序博客网 时间:2024/06/07 23:13
My solution Time limit exceed
// Time Limit Exceedpublic static TreeNode buildTree(int[] inorder, int[] postorder) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return helper(postorder.length - 1, 0, inorder.length - 1, postorder, inorder, map);}public static TreeNode helper(int postEnd, int inStart, int inEnd, int[] postorder, int[] inorder,Map<Integer, Integer> map) {if (postEnd < 0 || inStart > inEnd) {return null;}TreeNode root = new TreeNode(postorder[postEnd]);int index = map.get(root.val);root.right = helper(postEnd - 1, index + 1, inEnd, postorder, inorder, map);root.left = helper(postEnd - index + inStart, inStart, index - 1, postorder, inorder, map);return root;}
Solution 2
public static TreeNode buildTree2(int[] inorder, int[] postorder) {if (inorder == null || postorder == null || inorder.length != postorder.length)return null;HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();for (int i = 0; i < inorder.length; ++i) {map.put(inorder[i], i);}return helper2(0, inorder.length - 1, 0, postorder.length - 1, inorder, postorder, map);}private static TreeNode helper2(int inStart, int inEnd, int postStart, int postEnd, int[] inorder, int[] postorder,HashMap<Integer, Integer> map) {if (postStart > postEnd || inStart > inEnd)return null;TreeNode root = new TreeNode(postorder[postEnd]);int index = map.get(postorder[postEnd]);TreeNode leftchild = helper2(inStart, index - 1, postStart, postStart + index - inStart - 1, inorder, postorder, map);TreeNode rightchild = helper2(index + 1, inEnd, postStart + index - inStart, postEnd - 1, inorder, postorder, map);root.left = leftchild;root.right = rightchild;return root;}
Solution 3
//https://leetcode.com/discuss/10961/my-recursive-java-code-with-o-n-time-and-o-n-spaceint pInorder; // index of inorder arrayint pPostorder; // index of postorder arrayprivate TreeNode helper3(int[] inorder, int[] postorder, TreeNode end) { if (pPostorder < 0) { return null; } // create root node TreeNode n = new TreeNode(postorder[pPostorder--]); // if right node exist, create right subtree if (inorder[pInorder] != n.val) { n.right = helper3(inorder, postorder, n); } pInorder--; // if left node exist, create left subtree if ((end == null) || (inorder[pInorder] != end.val)) { n.left = helper3(inorder, postorder, end); } return n;}public TreeNode buildTree3(int[] inorder, int[] postorder) { pInorder = inorder.length - 1; pPostorder = postorder.length - 1; return helper3(inorder, postorder, null);}
Solution 4
//https://leetcode.com/discuss/15115/my-comprehension-of-o-n-solution-from-%40hongzhi public TreeNode buildTree4(int[] inorder, int[] postorder) { if (inorder == null || inorder.length < 1) return null; int i = inorder.length - 1; int p = i; TreeNode node; TreeNode root = new TreeNode(postorder[postorder.length - 1]); Stack<TreeNode> stack = new Stack<>(); stack.push(root); p--; while (true) { if (inorder[i] == stack.peek().val) { // inorder[i] is on top of stack, pop stack to get its parent to get to left side if (--i < 0) break; node = stack.pop(); if (!stack.isEmpty() && inorder[i] == stack.peek().val) {// continue pop stack to get to left side continue; } node.left = new TreeNode(postorder[p]); stack.push(node.left); } else { // inorder[i] is not on top of stack, postorder[p] must be right child node = new TreeNode(postorder[p]); stack.peek().right = node; stack.push(node); } p--; } return root; }
0 0
- 106. Construct Binary Tree from Inorder and Postorder Travers
- 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
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode#106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode *** 106. Construct Binary Tree from Inorder and Postorder Traversal
- 关于强行装逼之代码风骚
- C 程序.data .text .bbs 概述
- NavigationView
- 9.11 编程练习
- 小Tip:从字符串中提取数字
- 106. Construct Binary Tree from Inorder and Postorder Travers
- scala学习之路:1简单的打印输出,以及for循环的使用
- ios 删除Main.storyboard和 Launch.storyboard
- 10 种机器学习算法的要点(附 Python 和 R 代码)
- 如何扭转这个“积贫积弱”的研发团队
- scala学习之路:2.Basic使用指南
- 欢迎使用CSDN-markdown编辑器
- 39. Combination Sum
- 本学期课程教学要解决问题要点备忘录