题目:重建二叉树
解题思路:
1、前序遍历数组的第一个元素即为该节点对象的值,再通过查询中序遍历数组的元素,即可找到左右子节点数组;
2、二叉树相关的题可以使用递归,使用时需要注意一下几点:
(1)终止条件是:该节点为空,无法创建对象;
(2)递归方法需要返回一个节点对象;
(3)每次递归时,需要创建新的节点对象,并给节点赋值;
(4)左右节点仍然是一个结点对象,那么就可以再次调用递归方法创建左右节点;
import java.util.Arrays;
/**
* @Auther: ylei
* @Date: 2021-06-16 14:13
* @Description: 重建二叉树练习
*/
public class NewTree {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0){
return null;
}
int temp=0;
TreeNode newTree = new TreeNode(preorder[0]);
for(int i=0;i<inorder.length;i++){
if(inorder[i]==preorder[0]){
temp=i;
break;
}
}
newTree.left = buildTree(Arrays.copyOfRange(preorder,1,temp+1),Arrays.copyOfRange(inorder,0,temp));
newTree.right = buildTree(Arrays.copyOfRange(preorder,temp+1,preorder.length),Arrays.copyOfRange(inorder,temp+1,inorder.length));
return newTree;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}