线索化二叉树

线索化二叉树(线索化二叉树遍历方法,倒序线索化二叉树遍历结果) 本篇介绍线索化二叉树、线索化后的中序遍历以及反向输出中序遍历。 注:(不管是前序遍历、中序遍历或者后序遍历,道理都是一样的,只不过顺序不一样,所以本篇的就拿中序遍历作为讲解,方便统一与理解) 文章目录1.线索化二叉树1.1-什么是线索化二叉树1.2-线索化二叉树的意义1.3-线索化二叉树完整代码2.线索化后的中序遍历2.1-思路2.2-完整代码3.(拓展)利用线索化后的二叉树反向输出中序遍历3.1-思路3.2-完整代码 1.线索化二叉树 1.1-什么是线索化二叉树 首先思考一下:我们知道,不管是二叉树的前序 阅读详情

编译环境:VC++6.0

 

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define ERROR 0
#define OK  1

typedef char ElemType;

typedef enum PointerTag{Link,Thread};  /* Link==0: 指针 Thread==1: 线索 */

/* 二叉树结构体 */
typedef struct _ThrBiTreeNode    /* 线索二叉树结构体 */
{
 ElemType    data;
 struct _ThrBiTreeNode *lchild,*rchild;
 PointerTag    LTag,RTag;
}ThrBiTree;

int CreateThrBiTree(ThrBiTree **T)  /* 建立二叉树 */
{
 char ch;
 scanf("%c",&ch);
 getchar();
 if(ch == '#')
  *T = NULL;
 else
 {
  assert((*T) = (ThrBiTree*)malloc(sizeof(ThrBiTree)));
  (*T)->data = ch;
  (*T)->LTag = Link;
  (*T)->RTag = Link;
  (*T)->lchild = NULL;
  (*T)->rchild = NULL;
  CreateThrBiTree(&(*T)->lchild);
  CreateThrBiTree(&(*T)->rchild);
 }
 return OK;
}

int Threading(ThrBiTree **pre, ThrBiTree *p) /* 线索化操作 */
{
 if(p)
 {
  Threading(pre,p->lchild);
  if(!p->lchild)    /* 指向前驱 */
  {
   p->LTag = Thread;
   p->lchild = *pre;
  }
  if(!(*pre)->rchild)   /* 指向后继 */
  {
   (*pre)->RTag = Thread;
   (*pre)->rchild = p;
  }
  *pre = p;
  Threading(pre,p->rchild);
 }
 return OK;
}

int inorder_thread(ThrBiTree **Thrt,ThrBiTree *p)
{
 ThrBiTree *pre;
 assert(*Thrt = (ThrBiTree*)malloc(sizeof(ThrBiTree)));
 (*Thrt)->LTag = Link;
 (*Thrt)->RTag = Thread;
 (*Thrt)->rchild = *Thrt;  /* 右指针回指头结点 */
 if(!p)
 {
  (*Thrt)->lchild = *Thrt; /*如果二叉树为空,则做指针回指头结点*/
 }
 else
 {
  pre = *Thrt;
  (*Thrt)->lchild = p; /* 指向树的第一个结点 */
  Threading(&pre,p);  /* 线索化 */

  /* 处理最后一个结点 */
  pre->RTag = Thread;
  pre->rchild = *Thrt;
  (*Thrt)->rchild = pre;
 }
 return OK;
}

int print_ThrBiTree(ThrBiTree *T) /* 中序打印线索二叉树 */
{
 ThrBiTree *p;
 p = T->lchild;
 while(p != T)
 {
  while(p->LTag == Link)
  {
   p = p->lchild;
  }
  printf("%c",p->data);
  while(p->RTag == Thread && p->rchild != T)
  {
   p = p->rchild;
   printf("%c",p->data);
  }
  p = p->rchild;
 }

 return OK;
}

void main(void)
{
 ThrBiTree *T,*Thrt;
 CreateThrBiTree(&T);
 inorder_thread(&Thrt,T);
 print_ThrBiTree(Thrt);
}

【c++】二叉树的线索化 什么是二叉树的线索化?或者问什么是线索二叉树? 按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列。在改序列中,除第一个结点外每个结点有且仅有一个直接前驱结点;除最后一个结点外每一个结点有且仅有一个直接后继结点。这些指向直接前驱结点和指向直接后续结点的指针被称为线索(Thread),加了线索的二叉树称为线索二叉树。 以上是搜狗百科的一段文字,反正我是没看太懂。简单点 阅读详情

相关推荐

基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程

地下车库 Cartongrapher 3D建图

yhy_yhy13053117的博客 3940

利用栈实现线索化二叉树_javascript线索化二叉树

线索化二叉树数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树(中序遍历的数列为 {8, 3, 10, 1, 14, 6}). n+1=7线索二叉树基本介绍1.n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")2.这种加上了线索的二叉链表称...

weixin_30585729的博客 331

折叠式共源共栅放大器设计/备忘

w折叠式共源共栅基本结构如图

Czy1377004611的博客 3万+

线索化二叉树的实现

之前我们介绍过二叉树和它的具体实现http://blog.csdn.net/qq_34021920/article/details/78698930,但是不难发现,普通的二叉树存在以下的缺陷: 递归遍历有可能导致栈溢出; 非递归遍历有可能降低程序的效率 想要找到在某种遍历形式下某个结点的前驱或后继比较难 树中有大量的空指针域造成浪费,比如:假如二叉树中有n个结点,则必定有n+1个空指针域 线索化二叉

Amber的博客 386

AD9371实战:如何用ZCU106搭建JESD204B TX时钟链(含关键参数计算)

本文详细解析了如何基于Xilinx ZCU106开发板为AD9371搭建JESD204B TX时钟链。文章从系统需求出发,逐步推导出从IQ采样率到GTH线速率的关键参数计算公式,并提供了在Vivado中配置GTH收发器(包括QPLL选择、分频比设置)的实战步骤与调试技巧,旨在帮助硬件工程师快速实现稳定可靠的JESD204B高速数据传输链路。

weixin_29164843的博客 293

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

数据结构与算法学习笔记——线索化二叉树

# 基本介绍 1. n个结点的二叉链表中含有n+l【公式2n-(n-1)=n+1】个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索") 2) 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 3) 一个结点的前一个结点,称为前驱结点 4) 一个结点的后一个结点,称为后继结点

qq_29384339的博客 617

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2892

Python实现线索化二叉树 Python实现线索化存储二叉树 Python线索化二叉树的遍历

Python实现线索化二叉树 Python实现线索化存储二叉树 Python线索化二叉树的遍历

storyfull 3288

面试官连夜整理:103道AI Agent面试题,答对一半直接加薪50%

维度AutoGPTLangGraphAutoGen控制流LLM 驱动的隐式循环代码层定义的显式状态图对话驱动的自动流转状态存储Prompt 上下文中(易丢失)结构化 State 对象(可持久化)对话历史(自动累积)分支能力依赖 LLM 的文本输出(不稳定)条件边 + 节点路由(确定性)多 Agent 对话自然分支(涌现式)回溯/回滚无原生支持,只能重新开始原生 Checkpoint 支持时间旅行无全局回滚,单 Agent 可重启人机协同仅人工在关键点介入(需要自定义)原生支持。

weixin_35774598的博客 622

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5229

中序线索化二叉树

为什么要线索化二叉树? 答:对于如下一颗二叉树,中序遍历二叉树结果为4,2,5,1,3那么我想知道5前面的数是什么,就必须要先中序遍历一遍然后再去查询5前面的数字。那么如果我这样操作:对于左右子节点为null的节点,它的左节点指向前一个节点,右节点指向下一个节点,同时标记指针置为1,这样的话,我就可以直接知道中序遍历时5的前一个节点和后一个节点。 这个对二叉树的操作过程叫:线索化二叉...

小飞的博客 7832

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

线索化二叉树(先序,中序,后序)+线索化二叉树的遍历【java详解】

n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点的前一个结点,称为前驱结点一个结点的后一个结点,称为后继结点//线索化时记录前一个节点//节点存储结构。

2302_79862386的博客 3233

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【算法系列之线索化二叉树,前序线索化、中序线索化、后序线索化以及遍历~】

1.何谓线索化二叉树2.线索化二叉树的本质3.线索化二叉树的存储结构4.构建线索化二叉树4.1.先序线索化4.2.中序线索化4.3.后序线索化5.遍历线索化二叉树5.1.先序遍历 先序线索化二叉树5.2.中序遍历 中序线索化二叉树5.3.后序遍历 后序线索化二叉树6.线索化二叉树的优势与劣势 1.何谓线索化二叉树 ????‍☠️一般的二叉树的叶子节点的指针都造成了浪费,对于有n个节点的二叉树,其中就有n+1个空链域;所以我们可以将空链域存放某种遍历次序下该节点的前驱节点和后继节点,这些指针被成为线索,

Kevinnsm的博客 7088

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

线索化二叉树(前序线索化,中序线索化)

为什么要对二叉树进行线索化? 对二叉树进行遍历是以一定的规则将二叉树的节点排列成一个线性序列,这些线性序列有且仅有一个直接前驱和直接后继,但是以二叉链表进行存储的时候,只能找到节点的左右孩子信息,不能直接得到节点在任一序列的前驱和后继信息,前驱和后继信息只能在遍历的动态过程中才能得到。 如何获取到前驱和后继的信息呢? 在有n个节点的二叉链表中必定存在n+1个空链域,利用这些空链域存放节点的前

静陌慕春 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

中序线索化二叉树及遍历

中序线索化二叉树及遍历。 函数接口定义: void InThreading(BiThrTree p);// 以结点P为根的子树中序线索化 void InOrderTraverse_Thr(BiThrTree T);// 中序遍历二叉线索树T的非递归算法,对每个数据元素直接输出 裁判测试程序样例: #include<iostream> using namespace std; type...

zaiyang遇见 9090

线索化二叉树以及遍历线索化二叉树

线索化二叉树以及遍历线索化二叉树 1.线索二叉树基本介绍 n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索") 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 一个结点的前一个结点,称为前驱结点 一个结点的后一个结点,称为

xiaoshiguang3的博客 480

二叉树的线索化

测试环境:VS2010  一、线索二叉树的引入         二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。               为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。

snow_5288的博客 3215

线索化二叉树及线索化后的遍历

对于我来说,这个线索化也是困扰了我很久,一直不明白它的逻辑,甚至看视频课也听不懂,直到今天我才恍然大悟我之前一致忽略了一个很重要的点:线索化是针对完全二叉树而言的,所以我们应该了解完全二叉树的特点,对于这个线索化的遍历,我觉得要理解一个很重要的点:那就是完全二叉树的节点一定是左边连续的,也就是说当一个节点没有左孩子了,那么它一定没有右孩子,我之前就是没有考虑到这一点才想不通。

qq_51546137的博客 700
上一篇: 数组表示法建立图
下一篇: 邻接表-建立无向图、无向网、有向图、有向网
lwwworkspace
博客等级 码龄18年 38粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值