剑指Offer:重构二叉树(7)
题目描述:
根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
解题思路:
前序遍历的第一个节点为根节点,再用这个根节点在中序遍历中将其分为前后两部分,然后再依次递归;
1 import java.util.Arrays; 2 public class Solution { 3 public TreeNode reConstructBinaryTree(int [] pre,int [] in) { 4 if(pre.length==0||in.length==0){ 5 return null; 6 } 7 8 TreeNode root = new TreeNode(pre[0]); 9 for(int i=0;i<in.length;i++){ 10 if(in[i]==pre[0]){ 11 root.left=reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i)); 12 root.right=reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length)); 13 break; 14 } 15 } 16 return root; 17 } 18 }