[letcode刷题记录] 剑指offer07重建二叉树

 题目描述:

 [letcode刷题记录] 剑指offer07重建二叉树

/**
 * 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) {
        //出口,不然一直报 error:int cannot be dereferenced
        if(preorder==null ||preorder.length==0) 
        return null;
       // 1.找root
       TreeNode root=new TreeNode(preorder[0]); //前序遍历找根节点
        int index=Findindex(preorder,inorder);
       // 2.左子树
       //Arrays.copyOfRange复制一个组,找左子树的两个数组
       //preorder,1,index+1前序的1号位,对应中序的0号位,根节点对应inorder,0,index
         root.left=buildTree(Arrays.copyOfRange(preorder,1,index+1),Arrays.copyOfRange(inorder,0,index));

      //  3.右子树
       //找右子树的两个数组
       //preorder,index+1,preorder.length 在前序里找根节点的下一位
       root.right=buildTree(Arrays.copyOfRange(preorder,index+1,preorder.length),Arrays.copyOfRange(inorder,index+1,inorder.length));

        return root;
    }

    public int Findindex(int[] pre,int[] in)
    {
        //找出前序排列根节点在中序排列中的位置。
        //由题得:根节点在中序1号位,即前序在第i个位置与中序1号位数字相同返回i,
        for(int i=0;i<in.length;i++)
        {
            if(pre[0]==in[i]) return i;
        }
        return 0;
    }
}