数据结构--二叉树的线索化
2016-04-08 23:29
519 查看
线索二叉树它解决了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题,出现了二叉链表找左、右孩子困难的问题,线索二叉树又分为前序线索化,中序线索化和后序线索化,分别用不同的逻辑去实现。
线索二叉树的实现思想:借用一个枚举类型tag其中包含两个状态Link(代表有数据),thread(代表下一个节点为空)在一个节点的左节点或者右节点为空的情况下,将它的left或right设为thread,则它的左或右访问的是改遍历模式下访问到的下一个节点数据,这样就完成了跳到另一颗子树的过程,减少了递归的次数。
先序线索化
中序线索化
后序线索化
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1761955
线索二叉树的实现思想:借用一个枚举类型tag其中包含两个状态Link(代表有数据),thread(代表下一个节点为空)在一个节点的左节点或者右节点为空的情况下,将它的left或right设为thread,则它的左或右访问的是改遍历模式下访问到的下一个节点数据,这样就完成了跳到另一颗子树的过程,减少了递归的次数。
先序线索化
void _PrevorderThreading(BinaryTreeXsh<T> *cur, BinaryTreeXsh<T> *&prev) { if (cur == NULL) { return; } if (cur->_leftnode==NULL) { cur->_LeftTag=THREAD; cur->_leftnode=prev; } if (prev&&prev->_rightnode==NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; if (cur->_LeftTag == LINK) { _PrevorderThreading(cur->_leftnode, prev); } if (cur->_RightTag == LINK) { _PrevorderThreading(cur->_rightnode, prev); } }
中序线索化
void _InorderThreading(BinaryTreeXsh<T>* root, BinaryTreeXsh<T> *&prev) { BinaryTreeXsh<T>*cur = root; if (cur == NULL) { return; } _InorderThreading(cur->_leftnode, prev); if (cur->_leftnode == NULL) { cur->_LeftTag = THREAD; cur->_leftnode = prev; } if (prev&&prev->_rightnode == NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; _InorderThreading(cur->_rightnode, prev); }
后序线索化
void _PostorderThreading(BinaryTreeXsh<T>*root, BinaryTreeXsh<T>*&prev) { BinaryTreeXsh<T>*cur = root; if (cur == NULL) { return; } _PostorderThreading(cur->_leftnode, prev); _PostorderThreading(cur->_rightnode, prev); if (cur->_leftnode==NULL) { cur->_LeftTag = THREAD; cur->_leftnode = prev; } if (prev&&prev->_rightnode == NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; }
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1761955
相关文章推荐
- 【数据结构】FibonacciHeap 斐波那契堆(更新时间:2016-04-07)
- js--数据结构--树
- 数据结构-线性表的顺序结构
- 数据结构杂谈(一)浅谈基本排序算法
- PostgreSQL异步客户端(并模拟redis 数据结构)
- [Java8 Collection源码+算法+数据结构]-List(二)
- 数据结构——树
- 数据结构(线段树):BZOJ 1018: [SHOI2008]堵塞的交通traffic
- 数据结构实用概念
- 【学习笔记----数据结构07-队列】
- 【学习笔记----数据结构06-栈的应用】
- 数据结构-堆
- 【学习笔记----数据结构05-栈与队列】
- 【学习笔记----数据结构04-单循环链表】
- 位运算-Number of 1 Bits(求一个十进制数字,它的二进制表示中有多少个 1(bit))
- 【学习笔记----数据结构03--线性链表】
- 数组分段查找
- 栈-Min Stack(实现一个栈,用常数级时间找出栈中的最小值)
- 【学习笔记----数据结构01-概述】
- hdu 1506(dp || 单调栈)