前序线索二叉树
来源:互联网 发布:淘宝女包店铺 编辑:程序博客网 时间:2024/04/28 00:52
#include <iostream>#include <stack>using namespace std;typedef enum {Link,Thread,}Tag;typedef struct Node {int value;Tag lTag;Tag rTag;struct Node *left;struct Node *right;}Node, *ptrNode;class ThreadedBinaryTree {private:ptrNode tree;ptrNode head;public:void init();bool search(int value, ptrNode *&ptr);void add(int value);void preTraverse();void preThreading();void preOrderTraverse_Thr();};void ThreadedBinaryTree::preOrderTraverse_Thr() {ptrNode p = tree;while(p != head) {std::cout << p->value << " ";if (p->lTag == Link) {p = p->left;} else {p = p->right;}}}void ThreadedBinaryTree::preThreading() {head = new Node();if(tree) {head->lTag = Link;head->left = tree;} else {head->lTag = Thread;head->left = head;}ptrNode p = head;ptrNode q = head->left;stack<ptrNode> s;while(q || !s.empty()) {if (q) {s.push(q);if (q->left) {q->lTag = Link;p = q;q = q->left;} else {q->lTag = Thread;q->left = p;p = q;q = NULL;}} else {q = s.top()->right;s.pop();if (p->right) {p->rTag = Link;} else {p->rTag = Thread;p->right = q;}}}p->rTag = Thread;p->right = head;head->rTag = Thread;head->right = p;}void ThreadedBinaryTree::preTraverse() {ptrNode p = tree;stack<ptrNode> s;while (p || !s.empty()) {if (p) {std::cout << p->value << " ";s.push(p);p = p->left;} else {p = s.top()->right;s.pop();}}std::cout << std::endl;}void ThreadedBinaryTree::add(int value) {ptrNode *ptr;if(!search(value, ptr)) {ptrNode p = new Node();p->value = value;p->left = NULL;p->right = NULL;*ptr = p;}}bool ThreadedBinaryTree::search(int value, ptrNode *&ptr) {ptr = &tree;while (*ptr) {if (value < (*ptr)->value) {ptr = &(*ptr)->left;} else if (value > (*ptr)->value) {ptr = &(*ptr)->right;} else {return true;}}return false;}void ThreadedBinaryTree::init() {tree = NULL;}int main() {ThreadedBinaryTree *tbt = new ThreadedBinaryTree();tbt->init();tbt->add(62);tbt->add(88);tbt->add(58);tbt->add(47);tbt->add(35);tbt->add(73);tbt->add(51);tbt->add(99);tbt->add(37);tbt->add(93);tbt->preTraverse();tbt->preThreading();tbt->preOrderTraverse_Thr();delete tbt;return 0;}前序遍历二叉树: 62 58 47 35 37 51 88 73 99 93
遍历前序线索二叉树:62 58 47 35 37 51 88 73 99 93
0 0
- 前序线索二叉树
- 前序线索化二叉树
- 前序线索化二叉树
- 前序线索化二叉树
- 数据结构——前序线索化二叉树
- 【C++】前序线索化二叉树及其遍历
- 线索二叉树原理及前序、中序线索化(Java版)
- 数据结构——前序线索二叉树及其前序遍历
- 中序线索二叉树的创建、线索化和遍历(前序遍历和后序遍历)
- 中序线索二叉树
- 后序线索二叉树
- 中序线索二叉树
- 中序线索二叉树
- 中序线索二叉树
- 中序线索二叉树
- 中序线索二叉树
- 后序线索二叉树
- 二叉树之中序线索
- RHEL5下安装vim编辑器
- UDP的connect
- UVA OJ: 10300 - Ecological Premium
- 八.1.2 友元函数...
- 支持不同的设备
- 前序线索二叉树
- ruby on rails 手动添加测试文件
- 转换到 COFF 期间失败: 文件无效或损坏 解决
- 生成n位格雷码
- Codeforces Round #166 (Div. 2)
- 微软面试100题之13题:输入一个单向链表,输出该链表中倒数第k 个结点
- 归并排序的体会
- 使用QuickXDev不能跳转
- 个人所得税计算器