数据结构—二叉线索树

原理:参考趣学数据结构

代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct bmTree {int data;struct bmTree* lchild, *rchild;int ltag, rtag;
}bmTree;
bmTree * pre=NULL;//中序遍历的前驱指针
void createBTree(bmTree* & BMTree) {//创建二叉树int data;scanf_s("%d", &data);if (data == -1) {BMTree = NULL;}else {BMTree= (bmTree*)malloc(sizeof(bmTree));BMTree->data = data;createBTree(BMTree->lchild);createBTree(BMTree->rchild);}}
void midTraverseBMTree(bmTree* & BMTree) {//中序构造二叉线索树bmTree* T = BMTree;if (T) {midTraverseBMTree(T->lchild);if (!T->lchild) {T->ltag = 1;//指向直接前驱T->lchild = pre;}else {T->ltag = 0;//有左孩子}if (pre) {if (!pre->rchild) {pre->rtag = 1;//直接后继pre->rchild = T;}else {pre->rtag = 0;//有右孩子}}pre = T;midTraverseBMTree(T->rchild);}
}
void printMideBMT(bmTree * T) {//遍历二叉线索树bmTree *p = T;while (p) {while (p->ltag==0) {p = p->lchild;}printf("%d ", p->data);//左结点while (p->rtag == 1&&p->rchild) {p = p->rchild;printf("%d ", p->data);//根|右结点}p = p->rchild;//右子树}
}
int main() {bmTree* T;createBTree(T);midTraverseBMTree(T);pre->rchild = NULL;//中序遍历的最后一个元素,没有后继pre->rtag = 1;printf("二叉线索树进行中序遍历:");printMideBMT(T);printf("\n");system("pause");return 0;
}

测试截图:

时间复杂度O(nlogn),空间复杂度O(1)

如果存在什么问题,欢迎批评指正!谢谢!

数据结构---二叉线索树相关推荐

  1. 二叉线索树的先序、中序、后序的线索化及其遍历

    线索二叉树 注意:源码 二叉线索树的概念 二叉线索树是在传统二叉树结构的基础上,加上判断结点左右孩子是否为空的标志–LTag,RTag. 当左孩子为空的时候,lchild指向该节点的前驱结点,当右孩子 ...

  2. 线索树找*p的中序后继且中序遍历 二叉线索树

    //线索树找*p的中序后继且中序遍历 二叉线索树 #define thread 1 #define link 0 typedef struct Bt{char data;struct Bt *lc;/ ...

  3. 二叉线索树的线索化以及遍历

    //二叉树的创建,递归遍历,非递归遍历,拷贝,深度 #include<iostream> #include<stack> using namespace std; 二叉树的结构 ...

  4. 数据结构---二叉平衡排序树的删除

    数据结构-二叉平衡排序树的删除 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> typedef struct avlT ...

  5. 数据结构学习记录(二)——折半查找二叉判定树的画法

    以下给出我在学习中总结的一种比较简便的构造折半二叉判定树的思路以及方法: 思路分析: 在计算mid值时,使用的时mid=(low+high)/2  .这里由于mid为int类型,自动默认为向下取整,因 ...

  6. 下拉菜单实现树状结构_二叉索引树(树状数组)的原理

    背景 了解到二叉索引树这个数据结构,是在 leetcode 的 307 题,题目是要求实现一个数据结构,可以返回数组任意区间的和以及更新数组的某个值. 307.Range Sum Query - Mu ...

  7. 二叉索引树 -- 区间信息的维护与查询

    二叉索引树,俗称树状数组,也叫Fenwick树. 例: 给定一个n个元素的数组A1, A2, A3, --, An, 设计一个数据结构,支持以下两种操作. 1.Add  x  y       :让Ax ...

  8. 数据结构---二叉搜索树

    数据结构-二叉搜索树 原理:参考趣学数据结构 代码: 队列代码: #pragma once #define N 100 #define elemType bstTree* #include<st ...

  9. “后序遍历二叉运算树进行Lambda演算的化简”带来的联系

    今天闲来无事,想到一个自以为绝妙的想法,那就是用后序遍历二叉树Lambda演算的化简. 数据结构与算法中,我们想写个计算器就必须遇到一个问题,表达式求值!其实表达式很多就是我们所谓的现实生活中的问题解 ...

最新文章

  1. matlab的支持向量机调参,支持向量机(2)-应用
  2. ITK:图像重新取样
  3. dynamic flash xml news----滚动新闻
  4. Lua元表(Metatable)简易教程
  5. DevTools failed to load source map: Could not load content for…System error: net::ERR_FILE_NOT_FOUN
  6. 新手先学java还是python_2018年,初学者学Java还是Python?统计数据给你答案
  7. 不定期总结程序员常见误区
  8. NGUI的输入框制作(attach- input filed script的使用)
  9. vfp 使用 .Net 系统自带的组件
  10. 2021/4/23爬虫第五次课(爬虫网络请求模块下下)
  11. SPSS主成分分析(PCA)
  12. svn连接工具tortoiseSVN
  13. html中px em pt区别介绍
  14. 生活四大勤,让老人延年益寿
  15. 百度2016研发工程师在线编程题
  16. 一些特殊字符,由于编码问题显示不出来
  17. 【翻译】DataDog Kafka运维经验谈
  18. 百度Java面试题前200页和答案
  19. poi设置表格内容水平垂直居中
  20. python获取每日支付宝与银行卡账单

热门文章

  1. Android之如何设置背景的透明度
  2. 服务器安全维护包含,服务器安全维护包含
  3. php+对象+toarray_PHP 对象、数组间的转换
  4. 世界上最热的地方在哪里?原来火焰山不是第一...
  5. 手把手教你用7行代码实现微信聊天机器人 -- Python wxpy
  6. php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解
  7. 什么是python扩展库_什么是目前比较常用的Python扩展库管理工具
  8. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...
  9. 虚拟ip工具_针对游戏防封换IP有用吗?
  10. linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列