105. 从前序和中序遍历序列构造二叉树
题目
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
思路
前序遍历[0]是二叉树的根
在中序遍历中找到根节点的位置
左边的都是左子树
右边的都是右子树。
后递归
代码
package binaryTree;
import java.util.Arrays;
public class o105 {
public TreeNode buildTree(int[] preorder, int[] inorder) {
int n = preorder.length;
if(n==0){
return null;
}
int leftSize = indexOf(inorder,preorder[0]);
int[] pre1 = Arrays.copyOfRange(preorder,1,1+leftSize);
int[] pre2= Arrays.copyOfRange(preorder,leftSize+1,n);
int[] in1=Arrays.copyOfRange(inorder,0,leftSize);
int[] in2 =Arrays.copyOfRange(inorder,leftSize+1,n);
TreeNode left = buildTree(pre1,in1);
TreeNode right = buildTree(pre2,in2);
return new TreeNode(preorder[0],left,right);
}
private int indexOf(int[] a, int x){
for(int i = 0; ; i++){
if (x == a[i]){
return i;
}
}
}
}

浙公网安备 33010602011771号