Construct Binary Tree from Preorder and Inorder Traversal
题目地址:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
解题思路:
这道题就是需要用一个map来存储value在inorder里面的index。
代码:
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
解题思路:
这道题就是需要用一个map来存储value在inorder里面的index。
代码:
public TreeNode buildTree(int[] preorder, int[] inorder) { Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i <= inorder.length - 1; i++){ map.put(inorder[i], i); } return helper(map, preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1); } private TreeNode helper(Map<Integer, Integer> map, int[] preorder, int[] inorder, int preLeftBound, int preRightBound, int inLeftBound, int inRightBound){ if(preLeftBound > preRightBound || preLeftBound > preRightBound){ return null; } int rootVal = preorder[preLeftBound]; TreeNode root = new TreeNode(rootVal); int inRootIndex = map.get(rootVal); int leftRangeLen = inRootIndex - inLeftBound; root.left = helper(map, preorder, inorder, preLeftBound + 1, preLeftBound + leftRangeLen, inLeftBound, inRootIndex - 1); int rightRangeLen = inRightBound - inRootIndex; root.right = helper(map, preorder, inorder, preLeftBound + leftRangeLen + 1, preRightBound, inRootIndex + 1, inRightBound); return root; }

Comments
Post a Comment