第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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分