105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3 / 9 20 / 15 7
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { Map<Integer,Integer> map = new HashMap<>(); for(int i = 0;i < preorder.length;i++) map.put(inorder[i],i); return help(preorder,0,preorder.length,inorder,0,preorder.length,map); } private TreeNode help(int[] preorder,int start,int end, int[] inorder,int start2,int end2,Map<Integer,Integer> map){ if(start >= end) return null; TreeNode root = new TreeNode(preorder[start]); int loc = map.get(preorder[start]); root.left = help(preorder,start+1,start + loc - start2 + 1,inorder,start2,loc,map); root.right = help(preorder,start + loc - start2 + 1,end,inorder,loc + 1,end2,map); return root; } }