首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
二叉树线索化
时间:
2016-04-20 21:47:42
阅读:
179
评论:
0
收藏:
0
[点我收藏+]
标签:
#include
using namespace std; typedef enum { LINK, THREAD }PointerTag; template
struct BinaryTreeNodeThd { T _data; BinaryTreeNodeThd
* _left; BinaryTreeNodeThd
* _right; PointerTag _leftTag; PointerTag _rightTag; BinaryTreeNodeThd() : _left(NULL), _right(NULL), _leftTag(LINK), _rightTag(LINK) {} BinaryTreeNodeThd(const T&data) :_data(data), _left(NULL), _right(NULL), _leftTag(LINK), _rightTag(LINK) {} }; template
class BinaryTreeThd { public: BinaryTreeThd() :_root(NULL) {} BinaryTreeThd(const T*a, size_t size) { size_t index = 0; _root = _CreateTree(a, size, index); } BinaryTreeThd(const BinaryTreeThd
& t) { _root = _Copy(t._root); } void InOrderThreading() { BinaryTreeNodeThd
* prev = NULL; _InOrderThreading(_root, prev); } void PrevOrderThreading() { BinaryTreeNodeThd
* prev = NULL; _PrevOrderThreading(_root, prev); } void PostOrderThreading() { BinaryTreeNodeThd
* prev = NULL; _PostOrderThreading(_root, prev); } public: void InOrderThd() { BinaryTreeNodeThd
* cur=_root; while (cur) { while (cur->_leftTag == LINK) { cur = cur->_left; } cout<
_data<<" "; while(cur&&cur->_rightTag == THREAD) { cur = cur->_right; cout << cur->_data; } cur = cur->_right; } cout << endl; } void PrevOrderThd() { BinaryTreeNodeThd
*cur =_root; while (cur) { while (cur&&cur->_leftTag == LINK) { cout << cur->_data << " "; cur = cur->_left; } cout << cur->_data << " "; while (cur&&cur->_rightTag == THREAD) { cur = cur->_right; cout << cur->_data << " "; } if (cur->_leftTag == LINK) cur = cur->_left; else cur = cur->_right; } } protected: BinaryTreeNodeThd
* _CreateTree(const T*a, size_t size, size_t &index) { BinaryTreeNodeThd
* root = NULL; if (index < size&&a[index] != ‘#‘) { root = new BinaryTreeNodeThd
(a[index]); root->_left = _CreateTree(a, size, ++index); root->_right = _CreateTree(a, size, ++index); } return root; } void _InOrderThreading(BinaryTreeNodeThd
* cur, BinaryTreeNodeThd
*& prev) { if (cur == NULL) return; _InOrderThreading(cur->_left, prev); if (cur->_left == NULL) { cur->_leftTag = THREAD; cur->_left = prev; } if (prev&&prev->_rightTag == NULL) { prev->_rightTag = THREAD; prev->_right = cur; } prev = cur; _InOrderThreading(cur->_right, prev); } void _PrevOrderThreading(BinaryTreeNodeThd
*cur, BinaryTreeNodeThd
*& prev) { if (cur == NULL) { return; } if (cur->_left == NULL) { cur->_leftTag = THREAD; cur->_left = prev; } if (prev&&prev->_right== NULL) { prev->_rightTag = THREAD; prev->_right = cur; } prev = cur; if (cur->_leftTag == LINK) { _PrevOrderThreading(cur->_left, prev); } if (cur->_rightTag == LINK) { _PrevOrderThreading(cur->_right, prev); } } void _PostOrderThreading(BinaryTreeNodeThd
*cur, BinaryTreeNodeThd
*& prev) { if (cur == NULL) { return; } _PostOrderThreading(cur->_left, prev); _PostOrderThreading(cur->_right, prev); if (cur->_left == NULL) { cur->_leftTag = THREAD; cur->_left = prev; } if (prev&&prev->_right == NULL) { prev->_rightTag = THREAD; prev->_right = cur; } prev = cur; } BinaryTreeNodeThd
* _Copy(BinaryTreeNodeThd
* root) { if (root == NULL) return NULL; BinaryTreeNodeThd
* newRoot = new BinaryTreeNodeThd
(root->_data); newRoot->_left = _Copy(root->_left); newRoot->_right = _Copy(root->_right); return newRoot; } /*BinaryTreeThd
& operator=(BinaryTreeThd
*& t) { if (this != &t) { this->_Destory(_root); _root = _Copy(t._root); } return *this; }*/ //BinaryTreeNodeThd
& operator=(BinaryTreeNodeThd
t) //{ // swap(_root, t._root); // return *this; //} protected: BinaryTreeNodeThd
*_root; }; int main() { int a[] = { 1, 2, 3, ‘#‘, ‘#‘, 4, ‘#‘, ‘#‘, 5, 6 }; BinaryTreeThd
t(a, 10); BinaryTreeThd
temp; t.InOrderThd(); t.InOrderThreading(); //t.PrevOrderThreading(); //t.PostOrderThreading(); cout << endl; system("pause"); return 0; }
二叉树线索化
标签:
原文地址:http://www.cnblogs.com/yuanshuang/p/5414477.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!