[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;
}
}