二叉树的遍历和线索线索二叉树
一、二叉树的遍历
1.先序遍历
在二叉树非空的情况下:
(1)访问根结点
(2)先序遍历左子树
(3)先序遍历右子树
对应算法如下:
void PreOrder(BiTree T){
if(T != NULL){
visit(T);//访问根结点
PreOrder(T->lchild);//遍历右子树
PreOrder(T->rchild);//遍历左子树
}
}
2.中序遍历
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
对应算法如下:
void InOrder(BiTree T){
if(T != NULL){
InOrder(T->lchild);
visit(T);
PreOrder(T->rchild);
}
}
3.后序遍历过程为:
(1)中序遍历左子树
(2)中序遍历右子树
(3)访问根结点
对应算法如下:
void PostOrder(BiTree T){
if(T != NULL){
InOrder(T->lchild);
PreOrder(T->rchild);
visit(T);
}
}
4.由遍历序列构造二叉树
根据先序序列和中序序列可唯一确定一棵二叉树
根据后序序列和中序序列也可以确定一棵二叉树
但是后序和先序序列无法唯一确定一棵二叉树
二、线索二叉树
1.基本概念
若无左子树,令lchild指向前驱结点,若无右子树,令rchild指向后继结点。前继和后继根据遍历序列方式而不同
线索二叉树存储结构描述:
typedef struct _node_{
int data;//数据
struct _node_ *lchild, *rchild;//左右孩子指针
int ltag,rtag;//左右线索标志
}Node;
2.线索二叉树构造
通过中序遍历对二叉树线索化算法:
void InThred(ThreadTree &p,ThreadTrdd &pre){if(p != NULL){InThread(p->lchild, pre);//递归,线索化左子树if(p->lchild == NULL){ //左子树为空,建立前戏线索p->lchild = pre;p->ltag = 1;}if(pre != NULL && pre->rchild == NULL){pre->rchild = p; //建立前驱结点的后继线索pre->rtag = 1;}pre = p; //标记当前结点成为刚刚访问过的结点InThred(p->rchild, pre); //递归线索化右子树}
}
主算法如下:
void CreateInThread(ThreadTree T){ThreadTree pre = NULL;if(T != NULL){InThread(T, pre);pre->rchild = NULL;//处理遍历的最后一个结点pre->rtag = 1;}
}
3.线索二叉树的遍历
(1)找中序二叉树中中序序列下的第一个结点
ThreadNode *Firstnode(ThreadNode *p){
while(p->ltag == 0) p = p->lchild;
return p;
}
(2)找中序序列二叉树结点p在中序序列下的后继结点
ThreadNode *Nextnode(ThreadNode *p){
if(p->rtag == 0)return Firstnode(p->p->rchild);
else return p->rchild;
}
(3)利用以上两个算法,写出中序线索二叉树的中序遍历算法
void Inorder(ThreadNode *T){
for(ThradNode *p=Firstnode(T); p!=NULL; p=Nextnode(p))
visit(p);
}
二叉树的遍历和线索线索二叉树相关推荐
- 二叉树的遍历 中序线索二叉树
文章目录 前言 一.中序遍历的特点:投影 二.中序线索二叉树 三.代码思路 三.代码 前言 在N个节点的二叉树中,每个节点有2个指针,所以一共有2N个指针,除了根节点以外,每一个节点都有一个指针从它的 ...
- 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历
# -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...
- python二叉树广度遍历_黄哥Python: 二叉树的广度优先搜索的二种方法
特别提示,转行的朋友,2019年不学习数据结构和算法,不刷Leetcode 等面试题库,是找不到程序员工作或者说找不到好的工作.黄哥:黄哥Python:提醒要转行当程序员的朋友,学习要分先后主次zh ...
- 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法
重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...
- 【线索二叉树】C++代码及线索化过程详解
文章目录 线索二叉树的概念 中序线索二叉树的构造 中序线索二叉树的遍历 过程详解版代码 纯享版代码 我在这里不仅写了线索二叉树的普通代码,在代码中我还加入了线索化过程的打印,更好的帮助理解! 线索二叉 ...
- 《数据结构与算法》——树与二叉树之遍历总结
<数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...
- mysql 遍历二叉树_数据结构——树与二叉树的遍历
目录 树 二叉树 二叉树的遍历 总结 参考资料 序 树是学习数据结构的时候非常重要的一个数据结构,尤其是二叉树更为重要.像Java的HashMap 就使用了红黑树,而Mysql的索引就使用到了B+树. ...
- 二叉树的遍历(先序/中序/后序,递归/迭代)与搜索
遍历一个数据结构,也即逐一地处理(可读可写)其中所有元素. 二叉树的遍历:一棵二叉树可以看作一个状态空间:根节点(入口)对应状态空间的初始状态,父子结点连接对应状态的邻接关系.以这种观点,一次二叉树的 ...
- “二叉树遍历“详解 以及 二叉树的实现
目录 一.二叉树的遍历 1.二叉树的遍历的解释: 2.二叉树的遍历有三种递归结构 (1) 实现先序遍历: (2) 实现中序遍历: (3) 实现后序遍历: (4) 二叉树的层序遍历 二.二叉树的递归实现 ...
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
最新文章
- Linux中shell命令的用法和技巧
- 1.Power Designer 由数据库反向生成pdm文件
- 关于python安装lxml插件的问题
- 75个移动App开发教程
- 老子《道德经》第三章
- 二进制包20分钟快速安装部署 Kubernetes v1.14.0 集群
- civil3D地形导入AIW(设置投影坐标系)
- python数据爬取并可视化代码,python爬取摩拜单车API数据并做可视化分析(源码)...
- 识别INSB号码C语言如何讲述,探究机器码,深入研究C语言程序的机制
- 婚姻:中国女研究生结婚率下降明显 对方学历低看不上
- pcie转m2装系统win10_m.2固态硬盘怎么装win10教程|m.2固态硬盘装win10教程步骤
- 美团的战略、战术和能力圈 附下载地址
- 关于更改Python的默认工作路径
- SpringBoot banner图样
- OpenCV的Scalar对象怎样初始化,如何取分量值,如何与标量相乘?
- Informatica保障江苏电信规范化ETL开发
- 支持+86的手机和电话号码验证正则表达式
- html改变复选框颜色,如何利用纯CSS改变html?radio/checkbox默认背景颜色样式
- DataNode新节点服役与旧节点退役
- jqurey常用知识点 (非常重要!)