题解 | #重建二叉树#
重建二叉树
http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
import java.util.*; /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { //递归找到左右子树 if(pre.length==0){ return null; } int val = pre[0]; if(pre.length==1){ return new TreeNode(val); } //找到根节点 先放入 TreeNode root = new TreeNode(val); int index=0; for(int i=0;i<in.length;i++){ if(val==in[i]){ index =i; break; } } //递归进行拼接 左右子树 注意区间范围 //注意使用Arrays.copyOfRange 考到新的数组中 截取长度 root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,index+1),Arrays.copyOfRange(in,0,index)); root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,index+1,pre.length),Arrays.copyOfRange(in,index+1,in.length)); return root; } }放入根节点,再在中序遍历中找到根节点的位置,因为中序遍历根节点之前的是他的左子树,根节点之后的是他的右子树,然后进行递归依次进行拼接