第10周项目实践 线索二叉树的建立及遍历

2024-03-04 03:38

本文主要是介绍第10周项目实践 线索二叉树的建立及遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

typedef struct node
{
    Elemtype date;
    int ltag,rtag;
    struct node lchild;
    struct node rchild;
}TBTNode;
TBTNode *pre;//全局变量
void Thread(TBTNode *&p)//对二叉树进行中旭线索化
{
    if(p!=NULL)
    {
        Thread(p->lchild);//左子树线索化
        if(p->lchild==NULL)//左孩子不存在,进行前驱结点线索化
        {
            p->lchild=pre;//建立当前结点的前驱结点
            p->ltag=1;//标记当前结点的前驱结点的线索
        }
        else
            p->ltag=0;//p节点的左子树线索话
        if(p->rchild==NULL)
        {
            pre->rchild=p;//对pre后续节点的线索话
            pre->rchild=1;
        }
        else
            pre->rtag=0;
        pre=p;
        Thread(p->rchild);//右子树线索化
    }
}
TBTNode *CreateThread(TBTNode *b)//中序线索化二叉树
{
    TBTNode *root;
    root=(TBTNode *)malloc(sizeof(TBTNode));//建立头节点
    root->ltag=0;
    root->rtag=1;
    root->rchild=b;
    if(b!=NULL)
    {
        root->lchild=b;
        pre=root;//pre节点是p的前驱结点
        Thread(b);//中序遍历
        pre->rchild=root;//最后加入指向头节点的线索
        pre->rtag=1;
        root->rchild=pre;//头节点右线索话
    }
    else
        root->lchild=root;//b为空,指向其本身,否则root->lchild指向b
    return root;
}// 
void ThInorder(TBTNode *tb)//中序遍历线索树
{/*在中序遍历树时,开始节点是根节点的最左下节点,(该节点的做指针域为线索,即tag=1,
    当找到开始节点后访问他,如果p的右指针是右线索,说明线索指向的就是后继节点,就找到后继节点并访问;
    如果节点p的右指针不是右线索,他指向的是右子树,就转向右子树。*/
    TBTNode *p=tb->lchild;
    while(p!=tb)
    {
        while(p->lchild==0)
         p=p->lchild;
            cout<<p->date;
        while(p->rtag==1&&p->rchild!=tb)
        {
            p=p->rchild;
            cout<<p->date;
        }
        p=p->rchild;
    }

这篇关于第10周项目实践 线索二叉树的建立及遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771887

相关文章

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实