105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
运行结果
解题思路
先序遍历第一个为根节点--构造根节点
在中序遍历里找出根节点位置,根据节点数确定出左右子树的先序和中序子数组进行递归
java代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1); } public TreeNode build(int[] preorder,int prestart,int preend,int[] inorder,int instart,int inend){ if(prestart>preend) return null; int rootvalue=preorder[prestart]; int index=-1; for(int i=instart;i<=inend;i++){ if(inorder[i]==rootvalue){ index=i; break; } } TreeNode root=new TreeNode(rootvalue); int leftSize = index-instart; root.left=build(preorder,prestart+1,prestart+leftSize,inorder,instart,index-1); root.right=build(preorder,prestart+leftSize+1,preend,inorder,index+1,inend); return root; } }