线索二叉树算法 - 草根编程网
#include <malloc.h>
#include<stdlib.h>
typedef char DataType;/*定义DataType类型*/
typedef enum {Link,Thread}PointerTag;
typedef struct node{
DataType data;
struct node *lchild, *rchild;/*左右孩子子树*/
PointerTag LTag,RTag;
}BiThrNode; /*结点类型*/
typedef BiThrNode *BiThrTree ;/*二叉树类型*/
void CreatBinTree(BiThrTree *T)
{ /*构造二叉链表,注意:输入序列是先序序列*/
char ch;
if ((ch=getchar())==' ')
*T=NULL;
else{ /*读入非空格*/
*T=(BiThrNode *)malloc(sizeof(BiThrNode));/*生成结点*/
(*T)->data=ch;(*T)->LTag=Link;(*T)->RTag=Link;
CreatBinTree(&(*T)->lchild); /*构造左子树 */
CreatBinTree(&(*T)->rchild); /*构造右子树*/
}
}
BiThrTree pre;/*全局变量*/
void InThreading(BiThrTree p)
{
if(p)
{InThreading(p->lchild);/*左子树线索化*/
if(!p->lchild){p->LTag=Thread;p->lchild=pre;}/*前驱线索*/
if(!pre->rchild){pre->RTag=Thread;pre->rchild=p;}/*后继线索*/
pre=p;/*保持pre指向p*/
InThreading(p->rchild);/*右子树线索化*/
}
}
int InOrderThreading(BiThrTree *Thrt,BiThrTree T)
/*中序遍厉二叉树T,并将其中序线索化,Thrt指向头结点*/
{ if(!(*Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(0);
(*Thrt)->LTag=Link;(*Thrt)->RTag=Thread;/*建头结点*/
(*Thrt)->rchild=*Thrt;/*右指针回指*/
if(!T) (*Thrt)->lchild=*Thrt;
else
{ (*Thrt)->lchild=T;pre=*Thrt;
InThreading(T);/*中序遍历进行中序线索化*/
pre->rchild=*Thrt;pre->RTag=Thread;/*最后一个结点线索化*/
(*Thrt)->rchild=pre;
}
return 1;
}
int print(BiThrTree e)
{printf("%d %c %d\n",e->LTag,e->data,e->RTag);return 1;}
/*T指向头结点,头结点的左链lchild指向根结点,中序遍厉二叉树*/
{BiThrTree p;
p=T->lchild;/*p指向根结点*/
while(p!=T)/*空树或遍厉结束时,p==T*/
{while(p->LTag==Link) p=p->lchild;
if(!visit(p)) return 0;/*打印*/
while(p->RTag==Thread&&p->rchild!=T)
{p=p->rchild;visit(p);}/*访问后继结点*/
p=p->rchild;
}
return 1;
}
void main()
{ /*测试程序*/
BiThrTree T,Thrt;CreatBinTree(&T);
InOrderThreading(&Thrt,T);
InOrderTraverse(Thrt,print);
}
/*可输入"-+a *b -c d /e f "来测试(注意空格)*/
转载于:https://blog.51cto.com/1881149/352782
线索二叉树算法 - 草根编程网相关推荐
- 如何用ASP获取真实IP地址_草根编程
大家都知道,在ASP中可以使用Request.ServerVariables("REMOTE_ADDR")来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代 ...
- 数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)...
前言:前面了解了树的概念和基本的存储结构类型及树的分类,而在树中应用最广泛的种类是二叉树 一.简介 在树型结构中,如果每个父节点只有两个子节点,那么这样的树被称为二叉树(Binary tree).其中 ...
- 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法
重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...
- 线索二叉树代码实现 - 数据结构和算法49
线索二叉树代码实现 让编程改变世界 Change the world by program 程序参考代码:http://bbs.fishc.com/forum-112-1.html [buy] 获 ...
- 【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、
记录自己下半年写题目的记录.题目来自书或者网站. 练习(一)的地址: https://blog.csdn.net/qq_41358574/article/details/117098620?ops_r ...
- 【Java数据结构与算法】第十一章 顺序存储二叉树、线索二叉树和堆
第十一章 顺序存储二叉树.线索化二叉树.大顶堆.小顶堆和堆排序 文章目录 第十一章 顺序存储二叉树.线索化二叉树.大顶堆.小顶堆和堆排序 一.顺序存储二叉树 1.介绍 2.代码实现 二.线索二叉树 1 ...
- 线索二叉树中序非递归线索化以及递归线索化构建和遍历算法
引文 大部分教材给出了 线索二叉树的中序递归线索化以及中序遍历,但是没给出非递归,现在网上大部分非递归算法代码各种条件判断写的比较离谱,所以干脆自己总结了一个清晰的.线索二叉树中序非递归线索化以及递归 ...
- 编程基础 - 线索二叉树 (Threaded Binary Tree)
编程基础 - 线索二叉树 (Threaded Binary Tree) 返回分类:全部文章 >> 基础知识 返回上级:编程基础 - 二叉树 (Binary Tree) 本文将介绍线索二叉树 ...
- 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)
文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...
- 数据结构与算法(6-4)线索二叉树
优势:便于在中序遍历下,查找前驱和后继. 前驱/后继含义:AB中,A是B前驱,B是A后继. ltag=0时:lchild指向左孩子 ltag=1时:lchild指向前驱 ...
最新文章
- 一步一步写自己的SqlHelper类库
- 计算机科学CSTA,学编程,搞懂CSTA K-12计算机科学学习标准
- 在Java项目用框架(hibernate)的前提下解决sql的union问题
- 打印页面横向怎么设置_条码打印软件标签纸页面设置的方法
- js 获取元素,同级元素下的子元素总结
- poi 默认2位小数_odoo小数精确度
- TypeError: this.getResolve is not a function
- 界面控件DevExpress WinForms v21.2 - 全新升级的图表控件
- 找101-200之间的素数(Java实现)
- 用matlab求解分支定界法,matlab分支定界法程序
- 近年来的Java面试题汇总。帮你圆大厂梦。
- R语言柯西(cauchy)分布
- 华为服务器显示110,ar110s路由器设置内部服务器
- 计算机体系结构--进制及其运算
- 基于Android的看小说APP源码Android本科毕业设计Android小说阅读器、小说APP源码
- 云服务器怎么划分虚拟主机,云服务器 划分虚拟主机
- 数值积分公式及龙贝格(Romberg)算法实现matlab
- load json文件时常见错误以及修正总结(亲测有效)
- cocos2d-x 关于旋转和移动的一点小技巧
- 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现