树——(4)线索二叉树
来源:互联网 发布:中外标准数据库 编辑:程序博客网 时间:2024/06/05 02:08
1. 定义
1.1 起源
对于n个节点的二叉树,会有多少个空指针域呢?
Key: n+1个
对于n+1个NULL指针能不能够很好的利用起来呢??
1.2 线索二叉树
利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。这样的二叉树叫线索二叉树。
如果前驱和后继分别对应先序遍历,那么这叫先序线索树,同样有中序线索树,后序线索树。
1.3 优点
很好的解决了二叉树只能通过遍历寻找前驱和后继的问题。
2. 结构
2.1 node
lchild
ltag
data
rtag
rchild
ltag=0 时lchild指向左子女;ltag=1 时lchild指向前驱;
rtag=0 时rchild指向右子女;
rtag=1 时rchild指向后继;
2.2 structure of tree
中序线索树,如图(a)无头节点; (b)有头节点3. 线索化
以中序线索化为例:template <typename T>void CXThreadBitTree<T>::InThreadTree(){ CXThreadTreeNode<T> *node = m_root; CXThreadTreeNode<T> *pre_node = NULL; InThread( node, pre_node );}template <typename T>void CXThreadBitTree::InThread( CXThreadTreeNode<T> *cur_node, CXThreadTreeNode<T>*pre_node ){ if( !cur_node ) { InThread( cur_node->GetLeft(), pre_node ); //左子树线索化 if( !cur_node->GetLeft() ) { cur_node->mi_ltag = 1; //前驱线索 cur_node->m_lchild = pre_node; } else cur_node->mi_ltag = 0; if( !pre_node->GetRight() ) { pre_node->mi_rtag = 1; //后驱线索 pre_node->m_rchild = cur_node; } else pre_node->mi_rtag = 0; pre_node = cur_node; InThread( cur_node->m_rchild, pre_node ); //右子树线索化 }//if !cur_node}
- 树——(4)线索二叉树
- 数据结构——线索二叉树
- 数据结构——线索二叉树
- 数据结构——线索化二叉树
- 数据结构——线索二叉树
- 数据结构——线索二叉树
- 数据结构——线索化二叉树
- 数据结构 — 二叉树的线索化
- 6.3线索二叉树(二叉树的线索化)
- (C++)二叉树的线索化 / 线索二叉树
- 二叉树(3)——线索化
- C#算法系列(2)——线索二叉树
- 数据结构7—线索二叉树 (java)
- 数据结构—线索化二叉树(中序)
- 线索二叉树(解释)
- 线索二叉树(上)
- 线索二叉树(下)
- 线索二叉树(复习)
- 常用操作
- Maven
- RCP 前后台通信的解析
- opencv 学习第五天 图像噪音
- 命令积累
- 树——(4)线索二叉树
- Flex全屏的实现
- 矩阵的几何解释
- 基于HTTP长连接的B/S 聊天程序
- Unknown character set: 'utf8mb4' 异常
- hibernate运行正确,数据库中查找不到数据解决方法
- CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别
- ffmpeg 编解码
- PreTranslateMessage和TranslateMessage区别