数据结构与算法(6-4)线索二叉树
优势:便于在中序遍历下,查找前驱和后继。
前驱/后继含义:AB中,A是B前驱,B是A后继。
ltag=0时:lchild指向左孩子 ltag=1时:lchild指向前驱
rtag=0时:rchild指向右孩子 rtag=1时:rchild指向后继
过程:
1、先前序遍历创建二叉树
2、线索化二叉树
3、线索二叉树中序遍历输出
总代码:
//线索二叉树
//优势:便于在中序遍历下,查找前驱和后继
#include<stdio.h>
#include<malloc.h>
#include<string>int index = 0;
int first = 1;
char str[30];
typedef enum { Link, Thread } PointerTag; //0:Link(指向结点) 1:Thread(指向线索)typedef struct BiThTree
{char data;struct BiThTree* lchild, * rchild; //左孩子、右孩子PointerTag ltag, rtag; //0:指向左/右孩子; 1:指向前驱/后继struct BiThTree* parent; //指向双亲结点
}BiThTree;
BiThTree* head; //头
BiThTree* Pre; //前一个结点void Init_BiThTree()
{head = (BiThTree*)malloc(sizeof(BiThTree));head->parent = head;
}//前序遍历创建二叉树
void Create_BiThTree(BiThTree* T)
{if (str[index] == '#') //空{T->data = str[index++];return;}T->parent = Pre; //保存前一个结点T->data = str[index++];T->lchild = (BiThTree*)malloc(sizeof(BiThTree));T->rchild = (BiThTree*)malloc(sizeof(BiThTree));T->ltag = Link;T->rtag = Link;Pre = T; //保存前一个结点Create_BiThTree(T->lchild);Create_BiThTree(T->rchild);
}//线索化二叉树(中序)
void InThreading(BiThTree* T)
{//如果存在if (T->data != '#'){InThreading(T->lchild); //递归左子树//线索化左if (T->lchild->data == '#') //lchild为空,lchild指向前驱{T->ltag = Thread; //线索模式if (first) //首个赋空{T->lchild->data = '#';first = 0;}elseT->lchild = Pre; //lchild指向前驱}//线索化右else if (Pre->rchild->data == '#') //前驱的rchild为空,前驱的rchild指向后继{Pre->rtag = Thread; //线索模式Pre->rchild = T; //rchild指向后继}Pre = T;InThreading(T->rchild); //递归右子树}
}//线索二叉树中序遍历
void InOrderThTraverse(BiThTree* T)
{if (T->data != '#'){if (T->ltag == Link)InOrderThTraverse(T->lchild);printf("%c结点 \tlchild:%c\trchild:%c\n", T->data, T->lchild->data, T->rchild->data);if (T->rtag == Link)InOrderThTraverse(T->rchild);}
}int main()
{printf("请按照前序遍历顺序输入需要创建的二叉树结点:\n");scanf_s("%s", str, 20);Init_BiThTree(); //初始化Create_BiThTree(head); //前序遍历创建二叉树Pre = head;InThreading(head); //中序线索化二叉树InOrderThTraverse(head); //线索二叉树中序遍历
}
数据结构与算法(6-4)线索二叉树相关推荐
- 《数据结构与算法》——树与二叉树之遍历总结
<数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...
- 数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)...
前言:前面了解了树的概念和基本的存储结构类型及树的分类,而在树中应用最广泛的种类是二叉树 一.简介 在树型结构中,如果每个父节点只有两个子节点,那么这样的树被称为二叉树(Binary tree).其中 ...
- PTA数据结构与算法题目集 6-9 二叉树的遍历
PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...
- 数据结构与算法:树与二叉树python实现
最近复习一遍数据结构与算法,做一些笔记,大家可以一起复习. 一.树的一些容易混淆的定义: 结点层:根结点的层定义为1:根的孩子为第二层结点,依此类推: 树的深度(或高度):树中最大的结点层: 满二叉树 ...
- 数据结构与算法--解决问题的方法- 二叉树的的镜像
解决问题的思路 工作中遇到的问题可能用到的数据结构由很多,并且各种数据结构都不简单,我们不可能光凭借想象就能得到问题的解法,因此画图是在家具问题过程中用来帮助自己分析,推理的常用手段.很多问题比较抽象 ...
- 数据结构与算法(1)--二叉树
博客记录的第一个算法: 实现二叉树数据结构,以及深度优先搜索和广度优先搜索算法(非科班小白,努力中....) class BT_Node: def __init__(self, data, left ...
- LeetCode 【数据结构与算法专栏】【二叉树】
刷题笔记 二叉树算法专栏 leetcode 814. 二叉树剪枝 leetcode上二叉树的建树测试代码 leetcode 94 二叉树的中序遍历 leetcode 144 二叉树的前序遍历 leet ...
- Java数据结构和算法(十)——二叉树
接下来我们将会介绍另外一种数据结构--树.二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构.那么为什么要使用树?它有什么优点? 前面我们介绍数组的数据结构,我们知道对于有序 ...
- 《数据结构与算法》实验报告——二叉树的遍历
<数据结构>实验报告 学号:2018329621200 机房号10-414 姓名: 申屠志刚 日期:2019/11/4 程序名:main.cpp 实验内容: 二叉树的遍历 一.目的和要求( ...
- 数据结构和算法(06)---二叉树(c++)
文章目录 目录 二叉树 1.二叉树的基本概念 2.二叉树的应用和时间复杂度 3.二叉树的插入 4.二叉树的查找 5. 二叉树的遍历 6.二叉树的删除 二叉树的基本操作 1.二叉树的基础操作 2.代码实 ...
最新文章
- rdp协议打开 windows_RDPY - Twisted Python 实现的RDP协议(Windows 远程桌面)
- shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息...
- POJ 3259 Wormholes【最短路/SPFA判断负环模板】
- 高斯背景建模 matlab,高斯背景建模整理 – 要饭的
- 对怀孕的人有害的食物。。。朋友们记住咯!(欢迎转载)
- STM32 设置片外SRAM分散加载
- python --version没输出_如何在Linux上安装Python
- unix linux系统版本,怎么查看UNIX系统版本?
- clickhouse-小结 mutation操作 视图
- 开课吧:Web开发要学习哪些基础知识?
- 蓝桥杯国赛之阶乘位数
- python教程简书_python基础教程
- Python和Ruby语言对比
- OpenCV里IplImage数据结构中width和widthStep极易出错的问题
- 如何实现Windows 和 Linux 共享文件夹
- vs vsvim viemu vax 备忘
- Python文件去重代码
- 在邮箱中用html写邮件
- 邮件服务器如何搭建?企业自己搭建邮件服务器的方法
- Android 使用图片缓存,避免OOM(实现照片墙)
热门文章
- Android - 下载别人的android demo 运行的时候加载很久问题处理
- Android 属性动画(Property Animation) ObjectAnimator的介绍
- RecyclerView 的findFirstVisibleItemPosition()与findLastVisibleItemPosition()
- 微信小程序 view中的image水平垂直居中
- PYTHON自动化Day12-unittest自动注册登录
- NOIP模拟 数球(思维题)
- Go 学习笔记(20)— Go 操作 json 文件(编码生成 json、解码 json 为 map、解码 json 为 struct)
- Go 学习笔记(4)— Go 标识符、数据类型之间转换、布尔型、整型、浮点型、interface 类型
- 如何配置FastReport.Net环境
- innodb force recovery