有一点需要注意:先序遍历一个节点的左子树时,需要判断其ltag的值是否为0,如果为0可以正常遍历,但是,如果为1就不能进行遍历。因为ltag的值为1说明该结点的左指针指向的是它的前驱结点而不是左孩子(左孩子其实并不存在),继续遍历的话就会陷入“转圈圈”(前驱结点、该结点、前驱结点、该结点……)

因为在中序遍历的顺序为左孩子、跟结点、右孩子,后序遍历的顺序为左孩子、右孩子、根结点。在遍历到跟结点时它的左孩子肯定是已经被遍历过了,不存在上述“转圈圈”的问题,所以可以正常遍历。

右指针要么指向右孩子,要么指向该结点的后继结点,和正常的遍历顺序一样,所以也不存在上述“转圈圈”的问题!

一、先序线索化

#include <iostream>
using namespace std;
//线索二叉树的结点
typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag;
}ThreadNode,*ThreadTree;ThreadNode *pre=NULL;void visit(ThreadNode *q){if(q->lchild==NULL){q->lchild=pre;q->ltag=1;}if(pre!=NULL&&pre->rchild==NULL){pre->rchild=q;pre->rtag=1;}pre=q;
}void PreThread(ThreadTree T){if(T!=NULL){visit(T);if(T->ltag==0){PreThread(T->lchild);}PreThread(T->rchild);}
}void CreatePreThread(ThreadTree T){pre=NULL;if(T!=NULL){PreThread(T);if(pre->rchild==NULL){pre->rtag=1;}}
}

二、中序线索化

#include <iostream>
using namespace std;
//线索二叉树的结点
typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag;
}ThreadNode,*ThreadTree;ThreadNode *pre=NULL;void visit(ThreadNode *q){if(q->lchild==NULL){q->lchild=pre;q->ltag=1;}if(pre!=NULL&&pre->rchild==NULL){pre->rchild=q;pre->rtag=1;}pre=q;
}void InThread(ThreadTree T){if(T!=NULL){InThread(T->lchild);visit(T);InThread(T->rchild);}
}void CreateInThread(ThreadTree T){pre=NULL;if(T!=NULL){InThread(T);if(pre->rchild==NULL){pre->rtag=1;}}
}

三、后序线索化

#include <iostream>
using namespace std;
//线索二叉树的结点
typedef struct ThreadNode{int data;struct ThreadNode *lchild,*rchild;int ltag,rtag;
}ThreadNode,*ThreadTree;ThreadNode *pre=NULL;void visit(ThreadNode *q){if(q->lchild==NULL){q->lchild=pre;q->ltag=1;}if(pre!=NULL&&pre->rchild==NULL){pre->rchild=q;pre->rtag=1;}pre=q;
}void PostThread(ThreadTree T){if(T!=NULL){PostThread(T->lchild);PostThread(T->rchild);visit(T);}
}void CreatePostThread(ThreadTree T){pre=NULL;if(T!=NULL){PostThread(T);if(pre->rchild==NULL){pre->rtag=1;}}
}

二叉树的先序线索化、中序线索化、后序线索化的对比相关推荐

  1. 位域 内存 字节序_C语言中的位域、字节序、比特序、大小端(转)

    1.比特序 / 位序 / bit numbering / 我们知道一个字节有8位,也就是8个比特位.从第0位到第7位共8位.比特序就是用来描述比特位在字节中的存放顺序的.通过阅读网页的内容,关于比特序 ...

  2. 线索二叉树(前中后序线索化/遍历/画线索)

    线索二叉树 文章目录 线索二叉树 1 线索二叉树的基本概念 2 线索二叉树的构造 2.1 线索二叉树的存储结构 2.2 给线索二叉树画线索 2.2.1 中序 2.2.2 先序 2.2.3 后序 2.3 ...

  3. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

  4. 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)

    二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...

  5. C语言实现线索化二叉树(先序、中序、后序)

    >>如何用C语言构建一颗二叉树? 第一种方法: ThreadTree A = (ThreadTree)malloc(sizeof(ThreadNode));A->data = { ' ...

  6. 【数据结构】-线索二叉树(后序)

    后序线索化二叉树 1.头文件及类型定义 2.线索二叉树结点类型定义 3.函数声明 4.基本操作 4.1 先序建立线索二叉树 4.2 初始化tag 4.3 后序线索化二叉树 4.3.1 访问并建立线索 ...

  7. 数据结构 | 第十一章:二叉树和其他树 | 【前序遍历】【中序遍历】【后序遍历】【层次遍历】 | 并查集

    第5-10章:线性结构,元素之间存在线性次序(线性表.数组与矩阵.栈.队列.跳表和散列表 第11-15章:层次结构(二叉树和树.优先队列.竞赛树.搜索树) 文章目录 11.1 树 11.2 二叉树 1 ...

  8. 详细图解二叉树四种遍历(前序中序后序层次遍历)

    文章目录 一.前序遍历 常规操作 简单方法 二.中序遍历 常规操作 简单方法 三.后序遍历 常规操作 四.层次遍历 常规操作 本文中以此二叉树为例 一.前序遍历 常规操作 先根,再左,再右 确定了遍历 ...

  9. 【编程】二叉树的先序、中序、后序遍历

    二叉树的遍历主要有三种: 先序遍历(根左右) 中序遍历(左根右) 后序遍历(左右根) 举个例子: 先(根)序遍历(根左右):A B D H E I C F J K G 中(根)序遍历(左根右):D H ...

  10. 二叉树前序、中序、后序遍历求法

    二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...

最新文章

  1. python发送邮件拒绝_人生苦短之Python发邮件
  2. MyEclipse解决Launching xx on MyEclipse Tomcat has encountered a problem
  3. 4后期盒子叫什么_Carlife转Carplay盒子科普
  4. MAVEN项目标准目录结构 ;
  5. python3 Crypto环境
  6. debug assertion failed是什么意思?_如何使用 pdb 来性感 debug 你的 Python 代码?
  7. 变结构滑模控制抖振处理(1)------动态滑模法
  8. 贾跃亭发文祝父亲节快乐:FF就像我的孩子
  9. 前华为、魅族CMO加盟小米,雷军这样评价
  10. jsp篇 之 指令元素和动作元素
  11. 智能胖墩机器人_我就是那个叫胖墩儿的送货机器人
  12. 广东省零售连锁协会执行会长:技术更新太快,消费者才是零售企业最大的对手...
  13. 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘官网版v3.2.4-sosyes
  14. 使用pyquery爬取搜狗微信文章
  15. 单片机简易数字钟c语言程序,用AT89C51/AT89S52单片机制作的简易数字钟
  16. 【ROS小车9】仅用 RPLIDAR A1(思岚 A1) 雷达在 Ubuntu 虚拟机跑 gmapping
  17. 找不到服务器或应用项目,版本找不到服务器应用程序、源文件或项目的解决办法...
  18. 7-4 工作分配问题分数 20作者 陈晓梅单位 广东外语外贸大学
  19. 技术讨论 | 如何绕过并利用Bucket的上传策略和URL签名
  20. 剑与家园服务器信息,《剑与家园》合服规则公示

热门文章

  1. ML之NN:利用神经网络的BP算法解决XOR类(异或非)问题(BP solve XOR Problem)
  2. Ubuntu中的vi模式中的按上下左右键变成ABCD解决方法
  3. scrapy爬虫,爬取图片
  4. Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集
  5. 内存中“堆”和“栈”的区别
  6. preempt_count详解
  7. AB1601蓝牙初始化注意事项
  8. 测验3: 基本数据类型 (第3周)
  9. java netfox_SpringFox集成原理
  10. 近世代数--有限交换群--存在元素的阶是群阶的素因子