由前序和中序遍历重建二叉树(完整版)

根据二叉树的前序遍历和中序遍历结果重建二叉树。首先找到根节点,然后分别处理左子树和右子树,通过递归实现整个树的构造。代码实现中,核心部分是将前序和中序遍历序列转化为二叉树节点的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由前序和中序遍历重建二叉树

由前序和中序遍历重建二叉树

要求

已知二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路

前序遍历:先访问根节点,再访问左子节点,最后访问右子节点。

中序遍历:先访问左子节点,再访问根节点,最后访问右子节点。

后序遍历:先访问左子节点,再访问右子节点,最后访问根节点。

要点
1.二叉树的前序遍历第一个元素一定是该树的根节点

2.中序遍历序列中根节点前面一定是左子树,后面是右子树

因此,例中前序遍历的第一个节点{1}一定是这棵二叉树的根节点,根据中序遍历序列,可以发现中序遍历序列中节点{1}之前的{4,7,2}是这棵二叉树的左子树,{5,3,8,6}是这棵二叉树的右子树。然后,对于左子树,递归地把前序子序列{2,4,7}和中序子序列{4,7,2}看成新的前序遍历和中序遍历序列。此时,对于这两个序列,该子树的根节点是{2},该子树的左子树为{4,7}、右子树为空,如此递归下去(即把当前子树当做树,又根据上述步骤分析)。{5,3,8,6}这棵右子树的分析也是这样。

代码

Arrays.copyOfRange(int [] original, int from, int to)
新建一个前闭后开数组,[from,to)

定义二叉树节点

class TreeNode{
	int val;
	TreeNode left;
	TreeNode right;
	TreeNode(int x){
		val=x;
	}
}

核心代码,pre为前序数组,in为中序数组

p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值