二叉数应用

本文介绍了如何通过后序遍历线索找到二叉树的根节点,进而重构树并使用递归实现先序遍历。讲解了两种方法:直接递归和二叉搜索树还原,并提供了C++代码示例。重点在于理解树的结构和递归遍历的应用。

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

概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。

一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
二叉树的特点:

  1. 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
  2. 二叉树的子树有左右之分,其子树的次序不能颠倒。

题目

P1030 [NOIP2001 普及组] 求先序排列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分析

首先,后序遍历的最后一个字符就是根,因此要在中序遍历中找到它,就知道左右子数的先序和后序遍历了。这样就可以把二叉树构造出来,然后再搞一搞递归遍历。

换言之,先在后序遍历找到树根,从而找出左右子树节点,然后递归左右子数

其实主要就是熟悉树的结构  然后对其递归就没有什么太大问题了

还有一个方式就是用二叉搜索树   来还原整个树     之后再来判断

题解

#include<bits/stdc++.h>

using namespace std;
void beford(string in,string after){
    if (in.size()>0){
        char ch=after[after.size()-1];
        cout<<ch;
        int k=in.find(ch);
        beford(in.substr(0,k),after.substr(0,k));
        beford(in.substr(k+1),after.substr(k,in.size()-k-1));
    }
}
int main(){
    string inord,aftord;
    cin>>inord;cin>>aftord;
    beford(inord,aftord);cout<<endl;
    return 0;
}

上面是我用第一种思路写的代码   简单来说就是dfs 递归

后面的二叉搜索树 其实应该更加的好理解 

cs202  zhoujie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值