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

本文介绍了如何根据前序遍历和中序遍历的结果重建二叉树,通过递归的方式逐步确定根节点及其左右子树,并以具体的例子进行详细解析。

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

由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)

今天Val来分享如何利用一个前序遍历和中序遍历来重建二叉树,及代码的实现。
首先我们知道二叉树前序遍历顺序是:遇到一个节点先访问它的根节点再是左节点后访问右节点。
中序:先访问左节点再访问根节点后访问右节点。
如图:
这里写图片描述
下面以图中二叉树为例子讲解:

由前序遍历结果我们可以知道每次遍历的根节点root;中序遍历可以得知根节点的左和右树,然后将树分成两部分重建二叉树,这样范围不断缩小,利用递归来建这棵树。
比如第一次,前序遍历第一个节点 根节点,由中序遍历知道,123为根节点(4)的左子树中节点,65为它的右树节点,然后划分为两部分,再进行建树。

传入参数第一个:存放前序遍历节点的字符串
第二个: 存放中序遍历节点的字符串
第三个: 存放中序遍历节点的字符串+(字符串长度-1)

Node* ReBuildTree(char* prev, char* instart, char* inend)
    {
        if (*prev == '\0')
        {
            return NULL;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值