首页 > 编程语言 >《算法笔记》树与二叉树专题练习

《算法笔记》树与二叉树专题练习

时间:2023-08-25 21:32:04浏览次数:45  
标签:Node 遍历 return int 笔记 算法 二叉树 root

1、复原二叉树(由前序和中序求后序)

题目描述 小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。 输入 输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。 输出 对于每组输入,输出对应的二叉树的后续遍历结果。

DBACEGF ABCDEFG
BCAD CBAD

ACBFGED
CDAB
#include <iostream>
#include<cstring>
using namespace std;
const int maxN=1000;
//分别存储前序序列、中序序列
char pre[maxN],in[maxN];

struct Node
{
  char data;
  Node* lchild;
  Node* rchild;
};
//根据前序序列和中序序列构建一棵二叉树
Node* create(int preL,int preR,int inL,int inR)
{
    if(preL>preR)return NULL;//递归边界,前序序列长度小于等于0时结束
    Node* root=new Node;//创建根节点
    root->data=pre[preL];//先序序列的第一个就是根节点
    int k;
    for(k=inL;k<=inR;k++)
    {
        if(in[k]==pre[preL])break;//找到根节点在中序序列中的位置
    }
    int numLeft=k-inL;//左子树的节点个数
    //注意区间
    root->lchild=create(preL+1,preL+numLeft,inL,k-1);
    root->rchild=create(preL+numLeft+1,preR,k+1,inR);
    return root;
}
//二叉树的后序遍历,左右根顺序
void postOrder(Node* root)
{
    if(root==NULL)return;
    postOrder(root->lchild);
    postOrder(root->rchild);
    printf("%c",root->data);
}
int main()
{
    while(scanf("%s%s",pre,in)!=EOF)
    {
        int preLen=strlen(pre);
        int inLen=strlen(in);
        Node* root=create(0,preLen-1,0,inLen-1);
        postOrder(root);
        printf("\n");
    }

    return 0;
}
2、二叉树遍历

题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入

输入包括1行字符串,长度不超过100。

输出

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

a#b#cdef#####
a##

a b f e d c 
a
#include<iostream>
#include<cstring>
using namespace std;

char pre[105];
int pos;
struct Node
{
  char data;
  Node* lchild;
  Node* rchild;
    
};
//创建空节点
Node* createNode()
{
    Node* node=new Node;
    node->lchild=NULL;
    node->rchild=NULL;
    return node;
}
//创建二叉树
Node* createTree()
{
    int len=strlen(pre);
    if(len==0||pos==len)return NULL;//数据为空或已经遍历完
    if(pre[pos]=='#')//空树,直接遍历下一个,然后返回空
    {
        pos++;
        return NULL;
    }
    Node* root=createNode();//先创建一个根节点
    root->data=pre[pos++];
    //递归创建左右子树
    root->lchild=createTree();
    root->rchild=createTree();
    return root;
}
//二叉树的中序遍历,左根右顺序
void inOrder(Node* root)
{
    if(root==NULL)return;
    inOrder(root->lchild);
    printf("%c ",root->data);
    inOrder(root->rchild);
}
int main()
{
    while(scanf("%s",pre)!=EOF)
    {
        pos=0;
        Node* root=createTree();
        inOrder(root);
        printf("\n");
    }
    return 0;
}

标签:Node,遍历,return,int,笔记,算法,二叉树,root
From: https://blog.51cto.com/u_16200950/7235729

相关文章

  • 【学习笔记】二维偏序
    看着名字挺高级的就来学一下awa二维偏序是解决这样子的问题:有\(n\)个点,每一个点都有两个属性\(a,b\),且满足\[\left\{\begin{aligned}&i<j\\&a_i\lea_j\\&b_i\leb_j\end{aligned}\right.\]然后去求一些奇奇怪怪的问题解法是离散化后排序然后用两个树状数组来维护......
  • 智能优化算法:250多种优化算法解决旅行商问题(TSP)-matlab版(有注释)
    250种算法有:参考链接:https://www.jianshu.com/p/1134e6e774c4?v=1692966423722[1]   人工蜜蜂优化算法       ArtificialBeeColony,ABC[2]   人工蜂鸟算法       artificialhummingbirdalgorithm,AHA[3]   蚁狮优化器   AntLionOptimizer(ALO)[......
  • 【能量检测】基于认知无线电的能量检测算法的matlab仿真
    1.软件版本matlab2021a2.本算法理论知识随着无线通信的快速发展,用户对通信质量的要求越来越高,同时无线设备的大幅度增长,使得频谱资源显得更加重要。认知无线电(CognitiveRadio,CR)技术被当作解决频谱资源紧张、提高频谱利用率的强有力的技术,是下一代通信技术的重要组成成分......
  • 智能优化算法:250+种优化算法解决旅行商问题(TSP)-matlab版
    250+种优化算法(全网最全)解决旅行商问题(TSP)-matlab版,获取链接:https://mbd.pub/o/works/483834250种算法有:[1]   人工蜜蜂优化算法       ArtificialBeeColony,ABC[2]   人工蜂鸟算法       artificialhummingbirdalgorithm,AHA[3]   蚁狮优化......
  • 基于SIFT算子的车标识别算法matlab仿真
    1.软件版本matlab2017b2.系统概述本系统分为定位部分(包括车牌的定位和车标的定位)和车标特征向量提取和识别部分。本文车标的定位是根据车牌和车标的先验知识,提出一种由粗到精的车标定位方法。首先通过成熟的车牌定位方法对车牌进行定位,再根据车牌与车标的相对位置可以估计......
  • 杂题笔记
    CF11DASimpleTask题意给定一个\(n\)个点\(m\)条边的简单无向图,询问里面有多少个简单环。\(n\leq19\)解法对于每一个环,用唯一确定的方法去标记他。(寻找另一种更容易统计的对象,让这种对象可以唯一对应一个环)我们可以找到这个环里面编号最小的点,分别从这个点的左侧和......
  • 力扣---1448. 统计二叉树中好节点的数目
    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X定义为:从根到该节点X所经过的节点中,没有任何节点的值大于X的值。 示例1:输入:root=[3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点(3)永远是个好节点。节点4->(3,4)是路......
  • 《落实算法安全主体责任基本情况》范文,修改主体即可提交
    在数字化时代,算法已经成为了商业竞争和创新的关键要素。然而,算法的广泛应用也引发了对其安全性和合规性的关切。《落实算法安全主体责任基本情况》作为算法备案过程中的一环,具有极高的专业性,需要企业全面考虑算法的隐私保护、数据合规、风险预防等一系列关键问题。正因如此,许多......
  • openGauss学习笔记-50 openGauss 高级特性-DB4AI
    openGauss学习笔记-50openGauss高级特性-DB4AIopenGauss当前版本支持了原生DB4AI能力,通过引入原生AI算子,简化操作流程,充分利用数据库优化器、执行器的优化与执行能力,获得高性能的数据库内模型训练能力。更简化的模型训练与预测流程、更高的性能表现,让开发者在更短时间内能更专注......
  • 吃透这份阿里P7大佬整理的《Android Framework源码笔记》,还怕找不到工作?
    前言随着Android开发行业的快速发展,市场需求也在不断提升,导致低端Android开发市场就业大环境不好、行业趋势下滑,使得不少初中级的Android开发开始失业,找不到工作。对于大部分的开发者来说,找不到工作的一大部分原因,是因为AndroidFramework无法做到精通。想要成为真正的高级Androi......