二叉树及其遍历(递归和非递归实现)

【实战指南】DBeaver EE Windows版高效破解与配置全解析 本文详细解析了DBeaver EE Windows版的高效破解与配置方法,涵盖Java环境配置、破解包部署、配置文件修改等关键步骤,并提供了性能优化和数据库连接的最佳实践。适用于需要解锁企业版高级功能的数据库开发人员,帮助提升工作效率。 阅读详情

1.基本概念

二叉树:一种特殊的树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的五种形态:空二叉树、只有一个根结点、根节点只有左子树、根节点只有右子树、根节点既有左子树又有右子树。

特殊二叉树:

  • 斜树(所有结点只有左子树的二叉树叫左斜树,所有结点只有右子树的二叉树叫右斜树,与线性表结构类似)
  • 满二叉树(所有分支结点都存在左子树和右子树,且所有叶子结点都在同一层,即拥有最大结点数)
  • 完全二叉树(从上到下,从左到右依次填满树结构,若一层没填满,则不能跳到一层。满二叉树为特殊的完全二叉树)

二叉树的性质:

  • 性质1 在二叉树的第i层上至多有2i−1个结点
  • 性质2 深度为k的二叉树至多有2k−1个结点
  • 性质3 对于任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1
  • 性质4 具有n个结点的二叉树,其深度为⌊log2n⌋+1(⌊x⌋不大于x的最大整数)
  • 性质5 如果对于一棵有n个结点的完全二叉树的结点按层序编号(从第1层到⌊log2n⌋+1层,每层从左至右),对任 意一结点 i(1≤i≤n)有:
    1. 如果i=1,则i是根节点,无双亲。如果i>1,则⌊i/2⌋是其双亲结点
    2. 如果2i>n,则i结点的无左孩子,否则i结点左孩子为2i
    3. 如果2i+1>n,则i结点无右孩子,否则i结点右孩子为2i+1

2.二叉树的存储结构

顺序存储结构

按照完全二叉树的结构,从1开始依次对各结点编号,并根据编号将其存入对应下标的数组中。不存在的结点用“0”或其他符号表示。此类方法对于非完全二叉树,可能会造成大量存储空间的浪费。

链式存储结构(二叉链表)

该存储方法在每个结点中设置两个指针域,分别指向该结点的左孩子和右孩子。

 //二叉树的链式存储结构定义  
typedef char TElemType;         //元素的数据类型根据实际情况而定,这里假设为char

typedef struct TNode          //结点结构 
{  
    TElemType      data;           //数据域,用于存储结点数据   
    struct TNode  *lchild;     //指针,指向该结点的左孩子 
    struct TNode  *rchild;     //指针,指向该结点的右孩子             
}BiTNode,*BiTree;

如有需要,还可以增加一个指针域指向双亲,形成三叉链表。

3.二叉树的遍历

二叉树的遍历是从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
二叉树的遍历方式有很多,如果限制从左到右的方向,则主要包括前序遍历、中序遍历、后序遍历和层序遍历
每次遍历时,对各结点的操作,此处定义为最简单的输出操作:

void printelement(TElemType e)  //定义visit函数,最简单的就是print直接输出 
{
    printf("%c",e);
}

前序、中序和后序遍历有递归和非递归两种实现方法。非递归遍历方法需要运用栈这种数据结构,在此定义栈的数据结构以及建栈、压栈、出栈和验证栈是否为空操作:

typedef BiTNode* ElemType;    //定义数据类型为指向树结点的指针
typedef struct Node
{
    ElemType data;
    struct Node*next;
}Node,*LinkStack;

int InitStack(LinkStack*S)
{
    (*S)=(Node*)malloc(sizeof(Node));      //头结点 
    if (!(*S)) return ERROR;
    (*S)->next=NULL;                        
    (*S)->data=0;                         //头结点数据域用来存储栈长度 
}

int StackEmpty(LinkStack S)   //验证栈是否为空 
{
    if (S->data==0) return TRUE;
    return FALSE; 
}

int Push(LinkStack *S,ElemType e)   //将元素e压栈 
{
    Node*p;
    p=(Node*)malloc(sizeof(Node));
    if (!p) return ERROR;
    p->data=e;
    p->next=(*S)->next;
    (*S)->next=p;
    (*S)->data++;
    return OK;
}

int POP(LinkStack *S,ElemType*e)  //将栈顶元素出栈,并将值返回给e 
{
    Node*p;
    if (StackEmpty(*S)) return ERROR;
    p=(*S)->next;
    *e=p->data;
    (*S)->next=p->next;
    free(p);
    (*S)->data--;
    return OK;
}

前序遍历

若二叉树不为空,先访问根结点,然后前序遍历左子树,再前序遍历右子树。

void PreOrderTraverse(BiTree T,void(*visit)(TElemType))  //递归
{
    if (T==NULL) return;
    visit(T->data);
    PreOrderTraverse(T->lchild,visit);
    PreOrderTraverse(T->rchild,visit);
} 
void PreOrderTraverse(BiTree T,void(*visit)(TElemType))  //非递归
{
    BiTNode*p;
    LinkStack S;
    InitStack(&S);
    p=T;
    while (p||!StackEmpty(S))     //当树非空或栈不为空时进行遍历操作 
    {
        if (p)                     //当前结点存在时
        {
            Push(&S,p);            //将结点压栈
            visit(p->data);       //访问当前结点
            p=p->lchild;           //指向当前结点的左孩子
        }else
        {
            POP(&S,&p);            //当前结点不存在时,则弹出栈顶结点,使其成为当前结点 
            p=p->rchild;           //指向当前结点的右孩子 
        }
    }
}

中序遍历

若二叉树不为空,先中序遍历左子树,然后访问根结点,再中序遍历右子树。

void InOrderTraverse(BiTree T,void(*visit)(TElemType))  //递归
{
    if (T==NULL) return;
    InOrderTraverse(T->lchild,visit);
    visit(T->data);
    InOrderTraverse(T->rchild,visit);
}
void InOrderTraverse(BiTree T,void(*visit)(TElemType))  //非递归
{
    BiTNode*p;
    LinkStack S;
    InitStack(&S);
    p=T;
    while (p||!StackEmpty(S))      //当树非空或栈不为空时进行遍历操作 
    {
        if (p)                  //当前结点存在时 
        { 
            Push(&S,p);         //将结点压栈 
            p=p->lchild;        //指向当前结点的左孩子 
        }else
        {
            POP(&S,&p);        //当前结点不存在时,则弹出栈顶结点,使其成为当前结点 
            visit(p->data);    //访问当前结点 
            p=p->rchild;       //指向当前结点的右孩子 
        }
    }
}  

后序遍历

若二叉树不为空,先后序遍历左子树,然后后序遍历右子树,再访问根结点。

void PostOrderTraverse(BiTree T,void(*visit)(TElemType))  //递归
{
    if (T==NULL) return;
    PostOrderTraverse(T->lchild,visit);
    PostOrderTraverse(T->rchild,visit);
    visit(T->data);
}
void PostOrderTraverse(BiTree T,void(*visit)(TElemType)) //非递归
{
    BiTNode*pcur,*plastvisit;    //pcur为当前结点,plastvisit为上一个访问的结点 
    LinkStack S;
    InitStack(&S);               //建栈 
    pcur=T;                     //使根结点成为当前结点 
    plastvisit=NULL;             
    while(pcur)                 //寻找后序遍历的第一个结点,并将沿路结点依次压栈 
    {
        Push(&S,pcur);
        pcur=pcur->lchild;
    }
    while (!StackEmpty(S))    //栈为空时,所有结点输出完毕,退出循坏 
    {
        POP(&S,&pcur);        //将栈顶结点弹出,成为当前结点 
        if (pcur->rchild==NULL || pcur->rchild==plastvisit) //如果当前结点的右孩子不存在或右孩子已经被访问过,则可以输出该结点 
        {
            visit(pcur->data);
            plastvisit=pcur;   //使当前结点成为上一个访问的结点,为下一轮做准备 
        }else                //否则说明当前结点的右子树还没有遍历,不能输出当前结点 
        {
            Push(&S,pcur);  //将当前结点重新压栈 
            pcur=pcur->rchild;  //进入当前结点的右子树 
            while(pcur)    
            {
                Push(&S,pcur);
                pcur=pcur->lchild;
            }
        }    
    }
}

层序遍历

若二叉树不为空,从树的第一层开始,从左至右,从上至下逐层访问各结点。
和前三种遍历方法相比,层序遍历较为不同,在此借助队列结构来实现遍历。
首先定义队列的数据结构以及建队、入队、出队和验证队列是否为空的操作:

typedef BiTNode* ElemType; //定义数据类型为指向树结点的指针

typedef struct Node   
{  
    ElemType data;            //数据域,用于存储结点数据   
    struct Node *next;        //指针域,存储下一个结点的地址信息                
}QNode,*Queueptr;  

typedef struct  
{  
    Queueptr front,rear;     //定义头指针和尾指针   
}LinkQueue;

int InitQueue(LinkQueue*Q)    //建立队列   
{  
    Q->front=(QNode*)malloc(sizeof(QNode));   //建立头结点   
    if (!Q->front) return ERROR;  
    Q->front->next=NULL;     
    Q->rear=Q->front;           //头尾指针同时指向头结点,队列为空   
    return OK;  
}

int QueueEmpty(LinkQueue*Q)  //验证队列是否为空   
{  
    if (Q->front==Q->rear) return TRUE;  
    return FALSE;   
}

int EnQueue(LinkQueue*Q,ElemType e)  //插入元素e队列   
{  
    QNode*p;  
    if (!Q->front) return ERROR;  
    p=(QNode*)malloc(sizeof(QNode));  
    p->data=e;  
    p->next=NULL;                  //使新节点next指针指向空   
    Q->rear->next=p;               //使前一结点指向新节点   
    Q->rear=p;                     //使尾指针指向新节点   
}  

int DeQueue(LinkQueue*Q,ElemType*e)  //删除队头元素,返回值给e   
{  
    QNode*p;  
    if (!Q->front) return ERROR;  
    p=Q->front->next;                //记录队头结点   
    *e=p->data;  
    Q->front->next=p->next;          //将头结点指向队头结点的下一个结点   
    if (Q->rear==p) Q->rear=Q->front;  //若队头结点为最后一个结点,则使尾指针指向头结点   
    free(p);                          //释放队头结点   
    return OK;  
} 

层序遍历:

void LevelOrderTraverse(BiTree T,void(*visit)(TElemType))
{
    BiTNode*p;
    LinkQueue Q;        //定义队列类型 
    InitQueue(&Q);     //创建队列  
    if (T!=NULL) EnQueue(&Q,T);   //如果树非空,把根结点入队列 
    while(!QueueEmpty(&Q))     //如果队列非空,则继续遍历操作 
    {
        DeQueue(&Q,&p);      //将队列头的树结点弹出 
        visit(p->data);      //对出队列的结点进行访问 
        if (p->lchild)       //如果该出队列的结点左孩子存在,则将其左孩子入队列 
        EnQueue(&Q,p->lchild);
        if (p->rchild)      //如果该出队列的结点右孩子存在,则将其右孩子入队列 
        EnQueue(&Q,p->rchild);
    }

}

4.二叉树的建立

前面我们了解了几种基本的二叉树遍历方法,现在我们就可以运用这些方法来建立二叉树。只需把前面遍历过程中对每个结点的输出操作改为输入操作即可。例如用前序遍历的方法建立二叉树:

//二叉树的建立
void CreateBiTree(BiTree * T)
{
    char ch;
    scanf("%c",&ch);
    if (ch=='#') *T=NULL;    //如果结点数据为空,则将指针指向空 
    else
    {
        *T=(BiTree)malloc(sizeof(BiTNode));  //申请结点空间 
        if (!*T) exit(OVERFLOW);
        (*T)->data=ch;                       //输入数据,生成根节点 
        CreateBiTree(&((*T)->lchild));      //构造左子树 
        CreateBiTree(&((*T)->rchild));      //构造右子树 
    }
}

5.代码验证

int main()
{
    BiTree T;
    printf("按先序遍历建立二叉树:\n");
    CreateBiTree(&T);
    printf("先序遍历:\n");
    PreOrderTraverse(T,printelement);
    printf("\n中序遍历:\n");
    InOrderTraverse(T,printelement);
    printf("\n后序遍历:\n");
    PostOrderTraverse(T,printelement);
    printf("\n层序遍历:\n");
    LevelOrderTraverse(T,printelement);
    return 0;
}

这里写图片描述

保姆级教程:用Ansible 2.9自动化配置华为ENSP路由器(附Cloud连接避坑指南) 本文提供了一份详细的Ansible 2.9与华为ENSP路由器自动化配置教程,涵盖环境搭建、网络连通性配置、Playbook开发及典型问题排查。特别针对Cloud连接常见问题提供避坑指南,帮助运维工程师快速掌握网络自动化技能,提升工作效率。 阅读详情

相关推荐

【UE5】UE5 Dedicated Server专用服务器与网络同步

这篇文章是个人在学习UE4的网络同步方面的内容的一些记录,因为UE5出来了,顺带也一起熟悉熟悉UE5,所以也就直接使用UE5来实践了。说句实在话,UE4网络同步这块确实挺难的,我自己在网上搜索的博客的内容要么停留在很浅层面只搭建一个ds服务器,要么就直接深入源码去剖析UE4的网络机制,处在中间层面的内容少之又少,不得不自己好一阵研究,强烈推荐这几位博主的博文,我在学习的过程中也从中受益匪浅。 Ken_An、风蚀之月、 刘东无敌还有我师傅推荐给我的一本关于UE4网络的PDF。 一、什么是Dedicated

Goulandis 3万+

【考研数据结构代码题6】二叉树的遍历(递归与非递归实现)

2017年计算机学院初试题(二叉树层次遍历)及其拓展

人生处处是围城,一切都是最好的安排! 870

别再混淆了!一张图看懂SAP特殊采购类30/40/70/80的区别与选型指南

本文深度解析SAP特殊采购类30/40/70/80的核心逻辑与业务影响,通过对比框架和真实案例帮助用户掌握其适用边界。重点介绍委外加工(类型30)、工厂间转移(类型40/70)及计划与执行分离(类型80)的配置要点与常见问题,提供选型决策树和实施检查清单,助力企业优化供应链管理。

weixin_26938645的博客 453

数据结构--二叉树遍历(详细过程)

详细到啰嗦的程度,完全0基础都可完成。

m0_56283131的博客 4万+

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 477

BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事

本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构和内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。

weixin_33720956的博客 514

详解二叉树的遍历

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;父节点被访问的次序位于左右孩子节点之间,就是中序遍历;访问完左右孩子节点之后再访问父节点,就是后序遍历。不论是先序遍历、中序遍历还是后序遍历,左右孩子节点的相对访问次序是不变的,总是先访问左孩子...

supermouse的博客 1万+

傅里叶红外(FT-IR):Origin数据处理、光谱绘图、曲线优化、图形美化

双击 X 轴,选择“轴线和刻度线”,设置粗细为“2”(较常用的粗细度),主刻度和次刻度为“朝内”,然后在此对话框内选择左轴,设置粗细为“2”,主刻度和次刻度为“无”,上轴和右轴同左轴。(4)在第二个图层基础上新建第三个图层,针对第二组数据重复上述中(1)和(2)的操作,再添加第三组数据的折线图,并重复上述中(3)的操作。FTIR 光谱上的峰只有相对的强弱,因此只分析一个光谱上的一个峰的强度大小并无意义,一般分析两个光谱在同一位置的峰强相对大小,或者分析同一光谱不同位置的峰强相对大小并与另一光谱进行比较。

qiushireader的博客 3932

数据结构|二叉树的三种遍历方式,你掌握了几种?

本期讲解二叉树的三种遍历方式:前序遍历、中序遍历、后序遍历的详细讲解,图文并茂通俗易懂。

我的主页 1万+

使用libVLC进行视频截图的C/C++实现

通过这些代码,你可以在C/C++应用程序中实现视频截图功能,并将视频帧保存为图像文件。请注意,本文只提供了基本的示例代码,你可以根据自己的需求进行扩展和修改。libVLC是一个强大的开源多媒体框架,可以用于在C/C++应用程序中处理和播放音频和视频文件。我们将展示如何初始化libVLC,打开视频文件,捕获视频帧并保存为图像文件。在开始编写代码之前,你需要包含libVLC的头文件,并链接相应的库文件。在链接阶段,你需要添加libVLC库的链接选项。在使用libVLC之前,你需要初始化libVLC的实例。

学习使你进步。 471

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3933

一文弄懂二叉树的三种遍历方式

关注公众号:高性能架构探索。后台回复【资料】,可以免费领取 俗话说:学如逆水行舟,不进则退;心似平原走马,易放难收。这句话对程序员而言,体会更深。这行已经越来越卷了,时刻准备着,????。 二叉树,在面试中,已是必备的开胃菜。而在二叉树相关的面试题目中,遍历更是常考题目。本文将从二叉树的遍历角度入手,从递归和非递归角度来分析和讲解二叉树的遍历。 遍历 二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中的所有节点,使每个节点被且仅被访问一次。 二叉树的遍历,有先序遍历、中序遍历以

高性能架构探索 2万+

飞书接入OpenClaw:从零到一的保姆级图文教程

本文主要介绍了飞书接入OpenClaw:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 解决方案 2.1 步骤一:安装插件 2.2 步骤二:创建机器人应用 2.3 步骤三:测试 3. 注意事项

weixin_43178406的博客 13万+

Java创建二叉树及其遍历的递归和非递归实现

紧接上一篇,网上搜索了Java实现二叉树的方法及二叉树的遍历方法,参考:http://blog.youkuaiyun.com/skylinesky/article/details/6611442     学习和调试后代码如下:     测试数据(#表示节点为空):         所建立二叉树如下:         代码如下:     // 树的节点 public class TreeNod

心若无尘 3884

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

二叉树的先、中、后序遍历的递归和非递归实现及广度优先遍历、深度优先遍历及其高度

// 构造二叉树 1 / \ 2 3 / / \ 4 5 7 \ / 6 8一、二叉树的前、中、后序遍历(递归与非递归实现)二、二叉树的广度、深度优先遍历三、求二叉树...

ZCC的专栏 474

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构复习(一)二叉树的前中后序遍历(递归,非递归)以及层次遍历

二叉树的前中后序遍历(递归,非递归)以及层次遍历二叉树的定义先序遍历中序遍历后序遍历层次遍历建立二叉树总体执行程序 二叉树的定义 typedef struct BTNode { int data; struct BTNode *lchild,*rchild; }BTNode,*BiTree; 先序遍历 void PreOrder(BiTree T) //递归法 { if(...

AndreyFC的博客 622

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

二叉树的非递归遍历

二叉树的非递归遍历          二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说

nonsense的专栏 649

二叉树遍历-递归与非递归遍历

二叉树的遍历原则 先序遍历:①访问当前结点,②遍历左子树,③遍历右子树 中序遍历:①遍历左子树,②访问当前结点,③遍历右子树 后序遍历:①遍历左子树,②遍历右子树,③访问当前结点 递归遍历 递归写法易懂,按照遍历原则递归即可,详见代码21~41行 非递归遍历 非递归先序和中序遍历套路相似,后序遍历比较麻烦,因为先序和中序都是在右子树之前就输出了根结点,而后序必须记住根结点,等待右子树...

雪的期许 1607

二叉树的非递归前序,中序,后续遍历实现

二叉树的前中后序遍历通过递归的方式非常容易实现,通过调整一下打印节点和遍历左右子树的顺序即可实现。而非递归方式实现二叉树则要比递归实现复杂一些。主要原因是,递归的写法屏蔽掉了二叉树的回溯过程。但是,通过非递归方式实现的二叉树遍历,就不得不“人工”地对遍历栈进行控制。本文会对二叉树的前中后的非递归遍历方式进行说明。

Francisco_c82的博客 6703

链式二叉树 先序、中序、后序 遍历(递归、非递归)

参考博客:click here! 链式二叉树存储结构: typedef int DataType; typedef struct BiNode { DataType data; struct BiNode *lc, *rc; // 左右子节点指针 int depth; } BiNode, *BiTree; 初始化: void rootInit(BiTree &root...

成龙大侠的博客 2113

python 二叉树遍历递归非递归_二叉树的三种遍历方式(递归、非递归和Morris遍历)...

二叉树遍历是二叉树的最基本的操作,其实现方式主要有三种:递归遍历非递归遍历Morris遍历递归遍历的实现非常容易,非递归实现需要用到栈。而Morris算法可能很多人都不太熟悉,其强大之处在于只需要使用O(1)的空间就能实现对二叉树O(n)时间的遍历。二叉树结点的定义每个二叉树结点包括一个值以及左孩子和右孩子结点,其定义如下:class TreeNode {public:int val;TreeNo...

weixin_39531374的博客 267

二叉树之先序遍历(递归和非递归两种遍历)

二叉树的先序遍历

大克 914

二叉树的深度优先遍历、广度优先遍历和非递归遍历

二叉树的深度优先遍历、广度优先遍历和非递归遍历 二叉树的遍历: D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。 给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递...

chuangaixian5735的博客 196

【数据结构】二叉树遍历(递归遍历和非递归遍历)

学而不思则罔,思而不学则殆 【数据结构】二叉树遍历二叉树递归遍历递归前序遍历递归中序遍历递归后序遍历二叉树相关学习的网站 二叉树 定义:每个节点最多有两个子树的数成为二叉树 递归遍历 public class TreeNode { TreeNode left; TreeNode right; char values; public TreeNode(char values) { this.values = values; } } 递归前序遍历

珍心 1880

二叉树深度优先遍历的非递归实现

最近写算法题的过程中,忽然对基础的深度优先遍历记忆模糊。想到可能对于新手来说,对基础的二叉树深度优先遍历非递归版本实现理解不是很深刻,所以写下这篇博客。非递归实现二叉树的三种遍历方式还是挺重要的,在面试上也是常考题。一定要做到熟练掌握,“张口就来”。我是笙一,一个努力拼搏的人,一起进步,加油!

lofish_1的博客 1864

非递归方法中序遍历二叉树

typedef char BTreeData; // 二叉树的结点 typedef struct _btreeNode { BTreeData data; struct _btreeNode *lchild;   // 指向左孩子结点的指针 struct _btreeNode *rchild;   // 指向右孩子结点的指针 }BTreeNode;   // 二叉树 t

ying2541885998的博客 299
上一篇: 树
下一篇: 线索二叉树
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值