import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param preorder int整型一维数组
* @param inorder int整型一维数组
* @return TreeNode类
思路:递归
1.首先根据前序序列确定‘根节点’,
2.根据中序序列,分别确定 左子树和右子树的结点集合
3.再分别对左右子树进行递归
*/
public TreeNode buildTree (int[] preorder, int[] inorder) {
if(preorder.length==0 || inorder.length==0){
return null;
}
//1.获取根节点
TreeNode root = new TreeNode(preorder[0]);
//2.找中序序列中根节点的位置
int mid;
for(mid=0;inorder[mid]!=root.val;mid++);
//3.根据根节点,递归构建左右子树
int llen = mid; //左子树节点个数
int rlen = inorder.length-mid-1; //右子树节点个数. Arrays.copyOfRange [左下标,右下标): 左闭 右开
root.left = buildTree(Arrays.copyOfRange(preorder,1,mid+1),
Arrays.copyOfRange(inorder,0,mid)); //左子树的前序下标范围【1,mid】 中序下标范围【0,mid-1】
root.right = buildTree(Arrays.copyOfRange(preorder,mid+1,preorder.length),
Arrays.copyOfRange(inorder,mid+1,inorder.length)); //右子树的前序下标范围【mid+1,len-1】 中序下标范围【mid+1,len-1】
return root;
}
}
leetcode-----给出一棵树的前序遍历和中序遍历,请构造这颗二叉树
最新推荐文章于 2021-09-05 19:26:22 发布
这篇博客介绍了如何通过前序遍历和中序遍历的数组来构造一棵二叉树。主要思路是先找到根节点,然后根据中序遍历找到左子树和右子树的划分,接着递归地构建左右子树。这种方法利用了二叉树遍历的特点,实现了从序列数据到树结构的转换。
摘要由CSDN通过智能技术生成