数据结构--二叉树的线索化

news2024/9/23 7:32:23

数据结构–二叉树的线索化

用土办法找到中序前驱

typedef struct BiTNode
{
    ElemType data; //数据域
    struct BiTNode *lchild, *rchild; //左、右孩子指针
    struct BiTnode *parent; //父节点指针
}BiTNode, *BiTree;

BiTNode *p; // p指向目标结点
BiTNode *pre = NULL; //指向当前访问结点的前驱
BiTNode *final = NULL; //用于记录最终结果
void visit(BiTNode* q)
{
    if (p == q)
        final = pre;
    else
        pre = q;
}

void InOrder(BiTree T)
{
    if (T != NULL)
    {
        InOrder(T->lchild);
        visit(T);
        InOrder(T->rchild);
    }
}

中序遍历序列:D G B E A F C

中序线索化

typedef struct ThreadNode
{
    ElemType data;
    struct ThreadNode *lchild, *rchild;
    int ltag, rtag; //左、右线索标志
}ThreadNode, *ThreadTree; 

ThreadNode *pre = NULL; //指向当前访问结点的前驱
void visit(ThreadNode* q)
{
    if (q->lchild != NULL) //左子树为空,建立前驱线索
        q->lchild = pre, q->ltag = 1;
    if (pre != NULL && pre->rchild == NULL) //建立前驱结点的后继线索
        pre->rchild = q, pre->rtag = 1;
    pre = q;
}
void InThread(ThreadTree T)
{
    if (T != NULL)
    {
        InThread(T->lchild);
        visit(T);
        InThread(T->rchild);
    }
}

void CreateInThread(ThreadTree T)
{
    pre = NULL;
    if (T != NULL)
    {
        InThread(T); 
        if (pre->rchild == NULL) //处理遍历的最后一个结点
            pre->rtag = 1; 
    }
}

先序线索化

typedef struct ThreadNode
{
    ElemType data;
    struct ThreadNode *lchild, *rchild;
    int ltag, rtag; //左、右线索标志
}ThreadNode, *ThreadTree; 

ThreadNode *pre = NULL; //指向当前访问结点的前驱
void visit(ThreadNode* q)
{
    if (q->lchild != NULL) //左子树为空,建立前驱线索
        q->lchild = pre, q->ltag = 1;
    if (pre != NULL && pre->rchild == NULL) //建立前驱结点的后继线索
        pre->rchild = q, pre->rtag = 1;
    pre = q;
}
void PreThread(ThreadTree T)
{
    if (T != NULL)
    {
        visit(T);
        if (T->ltag == 0)
            PreThread(T->lchild);
        PreThread(T->rchild);
    }
}

void CreatePreThread(ThreadTree T)
{
    pre = NULL;
    if (T != NULL)
    {
        PreThread(T); 
        if (pre->rchild == NULL) //处理遍历的最后一个结点
            pre->rtag = 1; 
    }
}

后序线索化

typedef struct ThreadNode
{
    ElemType data;
    struct ThreadNode *lchild, *rchild;
    int ltag, rtag; //左、右线索标志
}ThreadNode, *ThreadTree; 

ThreadNode *pre = NULL; //指向当前访问结点的前驱
void visit(ThreadNode* q)
{
    if (q->lchild != NULL) //左子树为空,建立前驱线索
        q->lchild = pre, q->ltag = 1;
    if (pre != NULL && pre->rchild == NULL) //建立前驱结点的后继线索
        pre->rchild = q, pre->rtag = 1;
    pre = q;
}
void PostThread(ThreadTree T)
{
    if (T != NULL)
    {
        PostThread(T->lchild);
        PostThread(T->rchild);
        visit(T);
    }
}

void CreatePostThread(ThreadTree T)
{
    pre = NULL;
    if (T != NULL)
    {
        PostThread(T); 
        if (pre->rchild == NULL) //处理遍历的最后一个结点
            pre->rtag = 1; 
    }
}

知识点回顾与重要考点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Postman和jmeter做接口测试有什么区别吗?

目录 1.创建接口用例集(没区别) 2.步骤的实现(有区别) 3数据用例的实现 4断言的实现 5执行 6其他 总结: 1.创建接口用例集(没区别) Postman是Collections,Jmeter是线程组&am…

web安全php基础_php之string对象详解

PHP 字符串 字符串变量用于包含有字符的值。 在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。 在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 “Hello world!…

MySQL数据库:数据库管理系统与安装MySQL数据库

目录 一、理论 1.数据库管理系统 2.关系型数据库 3.数据库 4.MySQL数据库 5.MySQL部署 二、实验 1.yum安装MySQL 2.配置MySQL数据库的Tab补全 三、问题 1.数据库登录报错 2.数据库密码复杂度报错 四、总结 一、理论 1.数据库管理系统 (1&#xff09…

深入浅出fromCharCode和charCodeAt

先来看一个简单的输入输出 console.log(String.fromCharCode(30328)); //癸console.log(癸.charCodeAt()) //30328来回答一个问题,30328是什么? ascii? unicode? utf-8? utf-16? 来让我们看看fromCharCode 在MDN上面的解释 UTF-16代码单元序列…

【数据分析 - 基础入门之NumPy③】日常难题解决

知识目录 前言一、启动Jupyter Notebook报错没有这样的目录结语# 往期文章&相关导读 前言 本篇文章用于整理在学习 NumPy 过程中遇到的错误,以此做个记录,希望能帮助到大家,让大家少走弯路。 一、启动Jupyter Notebook报错没有这样的目…

改动最小,最简洁的 tomcat catalina.out日志切割(按天)

tomcat日志切割 环境:实现步骤具体操作 环境: 系统: linux操作系统 centOStomcat 8.5* 实现步骤 安装cronolog工具修改tomcat中的bin目录下的 catalina.sh 文件配置重启tomcat 具体操作 安装cronolog 工具输入命令: yum install cronolog 中间 停顿 填个 y 同意修改配置…

什么是cookies,session,token(面试必问)

目录 前言 http无状态 cookies cookie的格式显示 cookie存在问题 利用cookies可以做什么 session session的格式显示 session存在的问题 利用session可以做什么 token token的格式显示 token存在的问题 利用token可以做什么 总结 前言 一般在面试的时候&#xf…

内网隧道代理技术(九)之应用层代理技术介绍

应用层代理技术介绍 前面我们介绍了相关的一些概念和隧道的技术,主要还是停留在单个端口的隧道 1、反弹shell2、端口转发3、端口映射这些都是利用端口建立隧道,但是并不能满足我们日常生活中的要求 加入我们需要对网络中的机器进行扫描,我们就不能使用端口转发或者端口映射…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)

文章目录 一、检测相关(5篇)1.1 Contextual Affinity Distillation for Image Anomaly Detection1.2 Noise-to-Norm Reconstruction for Industrial Anomaly Detection and Localization1.3 MMNet: Multi-Collaboration and Multi-Supervision Network for Sequential Deepfake…

postman接口测试之postman常用的快捷键

作为一名IT程序猿,不懂一些工具的快捷方式,应该会被鄙视的吧。收集了一些Postman的快捷方式,大家一起动手操作~ 简单操作 操作mac系统windows系统 打开新标签 ⌘TCtrl T关闭标签⌘WCtrl W强制关闭标签Cmd Alt WCtrl Alt W切换到下一个…

【JavaEE】前后端综合项目-博客系统(上)

【JavaEE】前后端综合项目-博客系统(上) 文章目录 【JavaEE】前后端综合项目-博客系统(上)1. 创建项目2. 数据库设计3. 数据库操作的封装3.1 DataSource(单例)3.1 连接操作3.2 关闭操作3.3 创建实体类3.4 封…

“AI无界·智链全球”!壹沓科技2023世界人工智能大会论坛成功举办,构建数智供应链新范式

“AI无界智链全球”论坛成功举办 构建数智供应链新范式 7月6日,由世界人工智能大会组委会办公室指导,壹沓科技主办,上海交通大学安泰经济与管理学院、上海现代服务业联合会物流与供应链专委会、中国航务周刊协办的“AI无界智链全球”高端论坛…

前端vue入门(纯代码)23_多组件共享

我不喜欢去银行,就好像太监不喜欢去妓院一样,有些东西你没有,去了也是难受。 【24.Vuex中的多组件状态共享】 页面展示: vuex数据共享完整代码: App.vue和main.js:就不展示了。 store/index.js //该文…

Verilog学习笔记1:D触发器

代码1&#xff1a; timescale 1ns/10psmodule d_trigger(d,clk,q);input d; input clk; output q;assign q~d;endmodule//testbench module d_trigger_tb; reg clk; reg d; wire q;d_trigger d_trigger(.d(d),.clk(clk),.q(q));initial begind<0;clk<0;#1000 $stop;end…

异步电路后端实现流程(cdc signOff 后端做什么)

目录 1.一种后端异步电路的signOff流程 2.cdc maxDelay的原因及relax 2.1为什么要做maxDelay检查 2.2 如果有不同名字的clk 原本是同步时钟域 该怎么办 2.3 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办&#xff1f; 1.一种后端异步电路的signOff流程 同步…

Openpyxl给同个单元格的不同文字“上色”

文章目录 0.背景1. 原文代码2. 我的代码3. 总结 0.背景 openpyxl一直在用&#xff0c;今天看到一直关注的公众号又发出了奇技淫巧&#xff08;想要看原文或者要关注原作者的可以点击这里&#xff09;&#xff0c;就直接收录到主页好了。免得以后找不到了。 1. 原文代码 原来…

全网最详细,Fiddler抓包实战 - 手机APP端https请求(超详细)

前言 Fiddler抓取App端请求 准备工作&#xff1a; 将手机和电脑连接到同一路由器&#xff08;保证两者能够ping通&#xff09;&#xff1b; 如果使用的模拟器则不需要上面的步骤&#xff0c;因为模拟器是共享PC端的网络&#xff0c;两者网络默认就是连通的状态&#xff1b; 查…

【聘】夏日炎炎,高薪IT好岗位给你降温!

微思就业推荐 厦门海翼集团财务有限公司 职位&#xff1a;数字化管理部运维管理岗 6000-12000元/月*18薪 职位描述 负责公司日常办公IT设备、网络及机房服务器、业务系统的管理。 1、负责公司机房、服务器、网络设备规划、建设、管理、巡检&#xff1b;负责建立包括但不…

【Servlet综合项目练习】实现一个简单的博客系统~

目录 &#x1f31f;一、数据库设计部分 1、建表分析&#xff1a;系统中一共要实现几张表&#xff1f; 2、开始建表 &#x1f31f;二、大概框架与实现功能 &#x1f31f; 三、代码实现部分 &#x1f308;前言1&#xff1a;工具类的实现&#xff08;utils包下&#xff09;…

2023年开放式蓝牙耳机选购指南!南卡/韶音/Cleer/索尼/飞利浦等开放式耳机怎么选!最热的开放式蓝牙耳机大盘点!

前言 大家好&#xff0c;作为专注耳机研究多年的发烧级爱好者&#xff0c;毫不夸张的说我为耳机花的钱比买衣服还多&#xff0c;很多人都在问我开放式耳机到底有没有必要买&#xff1f;答案毫无疑问是有必要&#xff01;开放式耳机佩戴舒适又安全的特质让它在耳机届风靡&#…