第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- /*
- * Copyright (c)2016,烟台大学计算机与控制工程学院
- * All rights reserved.
- * 文件名称:wu.cpp
- * 作 者:陈朋
- * 完成日期:2016年11月11日
- * 版 本 号:v1.0
- *问题描述:实现中序线索化二叉树的算法验证,并测试数据。
- *输入描述:无
- *程序输出:测试数据
- */
- #include <stdio.h>
- #include <malloc.h>
- #define MaxSize 100
- typedef char ElemType;
- typedef struct node
- {
- ElemType data;
- int ltag,rtag; //增加的线索标记
- struct node *lchild;
- struct node *rchild;
- } TBTNode;
- void CreateTBTNode(TBTNode * &b,char *str)
- {
- TBTNode *St[MaxSize],*p=NULL;
- int top=-1,k,j=0;
- char ch;
- b=NULL; //建立的二叉树初始时为空
- ch=str[j];
- while (ch!='\0') //str未扫描完时循环
- {
- switch(ch)
- {
- case '(':
- top++;
- St[top]=p;
- k=1;
- break; //为左结点
- case ')':
- top--;
- break;
- case ',':
- k=2;
- break; //为右结点
- default:
- p=(TBTNode *)malloc(sizeof(TBTNode));
- p->data=ch;
- p->lchild=p->rchild=NULL;
- if (b==NULL) //*p为二叉树的根结点
- b=p;
- else //已建立二叉树根结点
- {
- switch(k)
- {
- case 1:
- St[top]->lchild=p;
- break;
- case 2:
- St[top]->rchild=p;
- break;
- }
- }
- }
- j++;
- ch=str[j];
- }
- }
- void DispTBTNode(TBTNode *b)
- {
- if (b!=NULL)
- {
- printf("%c",b->data);
- if (b->lchild!=NULL || b->rchild!=NULL)
- {
- printf("(");
- DispTBTNode(b->lchild);
- if (b->rchild!=NULL) printf(",");
- DispTBTNode(b->rchild);
- printf(")");
- }
- }
- }
- TBTNode *pre; //全局变量
- void Thread(TBTNode *&p)
- {
- if (p!=NULL)
- {
- Thread(p->lchild); //左子树线索化
- if (p->lchild==NULL) //前驱线索
- {
- p->lchild=pre; //建立当前结点的前驱线索
- p->ltag=1;
- }
- else p->ltag=0;
- if (pre->rchild==NULL) //后继线索
- {
- pre->rchild=p; //建立前驱结点的后继线索
- pre->rtag=1;
- }
- else pre->rtag=0;
- pre=p;
- Thread(p->rchild); //右子树线索化
- }
- }
- TBTNode *CreaThread(TBTNode *b) //中序线索化二叉树
- {
- TBTNode *root;
- root=(TBTNode *)malloc(sizeof(TBTNode)); //创建根结点
- root->ltag=0;
- root->rtag=1;
- root->rchild=b;
- if (b==NULL) //空二叉树
- root->lchild=root;
- else
- {
- root->lchild=b;
- pre=root; //pre是*p的前驱结点,供加线索用
- Thread(b); //中序遍历线索化二叉树
- pre->rchild=root; //最后处理,加入指向根结点的线索
- pre->rtag=1;
- root->rchild=pre; //根结点右线索化
- }
- return root;
- }
- void ThInOrder(TBTNode *tb)
- {
- TBTNode *p=tb->lchild; //指向根结点
- while (p!=tb)
- {
- while (p->ltag==0) p=p->lchild;
- printf("%c ",p->data);
- while (p->rtag==1 && p->rchild!=tb)
- {
- p=p->rchild;
- printf("%c ",p->data);
- }
- p=p->rchild;
- }
- }
- int main()
- {
- TBTNode *b,*tb;
- CreateTBTNode(b,"A(B(D(,G)),C(E,F))");
- printf(" 二叉树:");
- DispTBTNode(b);
- printf("\n");
- tb=CreaThread(b);
- printf(" 线索中序序列:");
- ThInOrder(tb);
- printf("\n");
- return 0;
- }
- 运行结果:
第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证相关推荐
- node 获取表单数据 为空_程序员:数据结构和算法,中序线索化二叉树
1.中序线索化二叉树 创建如上的二叉树,线索化二叉树时,根据指定的遍历方式得到的节点的访问顺序,一个节点前面的节点,叫做前驱节点,一个节点后面的节点,叫做后继节点. 线索化二叉树的规则: ...
- java线索二叉树的实现_JAVA递归实现线索化二叉树
JAVA递归实现线索化二叉树 基础理论 首先,二叉树递归遍历分为先序遍历.中序遍历和后序遍历. 先序遍历为:根节点+左子树+右子树 中序遍历为:左子树+根节点+右子树 后序遍历为:左子树+右子树+根节 ...
- 数据结构上机实践第10周项目1 - 二叉树算法验证
二叉树算法验证 本次实践主要是对于二叉树算法的验证,达成对于算法熟练掌握的目的. 实践所用的二叉树算法库点击此处可以参考(编译环境:VC++6.0) 一.层次遍历算法验证 验证具体要求如下: 实现二叉 ...
- 线索二叉树原理及前序、中序线索化(Java版)
转载 原文地址:https://blog.csdn.net/UncleMing5371/article/details/54176252 一.线索二叉树原理 前面介绍二叉树原理及特殊二叉树文章中提到, ...
- 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...
- 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)
二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...
- LeetCode--144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)
二叉树的前序.中序.后序.层序遍历(递归,迭代,栈,队列) 1. 二叉树的前序遍历 1.1 题目描述 1.2 题目分析 1.3 Python实现 2. 二叉树的中序遍历 2.1 题目描述 2.2 题目 ...
- 通过中序线索二叉树找某节点的后续前驱☆
题目:写出在中序线索二叉树里查找指定节点在后序的前驱结点的算法 分析: 在后序序列中,若节点p有右子女,则右子女是其前驱,若无右子女而有左子女,则左子女是其前驱.若节点p左右子女均无, ...
- c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...
点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...
- 中序线索二叉树(C语言实现)
目录 1.线索二叉树的定义: 2.线索二叉树的存储结构: 3.创建中序线索二叉树 4.遍历中序线索二叉树 5.在中序线索二叉树上查找任意结点的中序前驱结点 6.在中序线索二叉树上查找任意结点的中序后继 ...
最新文章
- 【工具】Internet Download Manager( IDM )抓取站点
- ld-linux-x86-64.so.2+,RedHat6安装Oracle数据库遇到错误 C [ld-linux-x86-64.so.2+0x14d70]
- Java消息中间件(activeMQ)
- Ajax系统学习总结
- html5引擎笔试题,最新!HTML5经典面试题型(附答案)
- ftp同一主机的多个子进程使用同一个套接字_linux进程通信方式对比
- shell mysql awk_shell mysql 处理数据小结
- Android Animation学习(三) ApiDemos解析:XML动画文件的使用
- CentOS6.5下安装mongodb
- AVR工具指南(二)
- POJ NOI0105-45 金币
- 人类的终极目标是什么?
- 云锁卸载 linux,ubuntu下云锁卸载出错后无法重新安装的解决办法checking installation environment:...
- T229473 D. 背单词的小智(二分)
- 计算机cpu风扇不转怎么办,如果计算机启动时cpu风扇不旋转,该怎么办?解决方法[详细说明]...
- tinkpad e450c 进入 BIOS
- iOS使用UICollectionView只允许向左方向滑动,不允许向右方向滑动。
- 爬取雪球网股票信息(一)
- TI高精度实验室ADC系列培训视频 第3章和第4章 ADC噪声分析
- cocos creator实例--CocosCreator实现的 解救人质 游戏,学会碰撞检测
热门文章
- java使用POI导出Excel,下拉列表联动,单元格合并,日期校验,锁定指定列禁止修改
- 计算机硬盘如何制作成移动硬盘,电脑拆出来的闲置硬盘别扔 这么做帮你把它变成移动硬盘...
- 谈中国分布式数据库商业之路:OSM与DB-Inside
- ps渐变怎么用和渐变工具技巧
- 一台手机第一天支付1元,第二天支付2元,第三天支付4元,连续支付30天,请问一共需要支付多少钱?
- 安卓zip解压软件_破解软件之“安卓压缩包zip或rar密码破解(116位数任意破)”...
- 计算机图形学:光线追踪原理(ray tracing)
- 信创环境下密码强度规则:设置密码长度为6至20位,包含大、小写字母、数字、特殊字符组合
- 十年磨一剑,奋进新征程!麒麟信安在上交所科创板成功上市
- 3d人体智能测试软件,人体系统女性3Dapp