线索二叉树的建立及遍历
来源:互联网 发布:古剑奇谭ol激活码淘宝 编辑:程序博客网 时间:2024/04/30 19:27
连写3篇博客。。。记录这2天的学习内容。。。
代码。。。。
// 参考 大话数据结构#include <iostream>#define NULLCHAR '#'using namespace std;enum Type{ LINK, THREAD };typedef struct BiTrtree{char data;struct BiTrtree *left, *right;Type lType, rType;}bitrtree, *bitrtreePtr;//中序线索化bitrtreePtr preNode = NULL; //必须有这个void inThreading(bitrtreePtr tree){ /* 这种方法会导致右子树最后一个节点的rType没被标成THREAD */if (tree){inThreading(tree->left); //递归左子树if (tree->left == NULL){tree->lType = Type::THREAD;tree->left = preNode;}if (preNode && preNode->right == NULL) //这里要判断preNode是否存在{preNode->rType = Type::THREAD;preNode->right = tree;}preNode = tree;inThreading(tree->right); //递归右子树}}//二叉树的建立void createTree(bitrtreePtr *tree){char c;cin >> c;if (c == NULLCHAR)*tree = NULL;else{*tree = (bitrtreePtr)malloc(sizeof(bitrtree));(*tree)->data = c;(*tree)->lType = Type::LINK;(*tree)->rType = Type::LINK;createTree(&(*tree)->left);createTree(&(*tree)->right);}}//线索二叉树的遍历void traversal(bitrtreePtr tree) //从左往右{while (tree) //为空的时候结束循环{while (tree->left && tree->lType == Type::LINK) //左子树存在且类型为LINK,则循环到要输出的第一个节点tree = tree->left;cout << tree->data;while (tree->right && tree->rType == Type::THREAD)//右子树存在且类型为THREAD,则循环输出它们的data{tree = tree->right;cout << tree->data;}tree = tree->right; //进入右子树}cout << endl;}void traversal2(bitrtreePtr tree) //从右往左{while (tree){while (tree->right && tree->rType == Type::LINK){tree = tree->right;}cout << tree->data;while (tree->left && tree->lType == Type::THREAD){tree = tree->left;cout << tree->data;}tree = tree->left;}cout << endl;}//ABCDF###E###GH##I#J##int main(){bitrtreePtr tree = NULL; //生成二叉树createTree(&tree); //中序线索化inThreading(tree); cout << "Left to right:"; traversal(tree); cout << "Right to left:";traversal2(tree);return 0;}
主要就是空的左儿子指向前驱,空的右儿子指向后继,(画的有点难看=。=)
结果。。。。。
0 0
- 线索二叉树的建立及遍历
- 二叉树的建立,遍历,线索化
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立和遍历
- 线索化二叉树的建立,遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的生成及遍历
- 线索二叉树的生成及遍历
- 第10周项目实践 线索二叉树的建立及遍历
- 线索二叉树模型的建立与遍历
- 线索二叉树的建立与遍历C/C++
- 线索二叉树的建立和中序遍历
- 线索二叉树的建立及其遍历访问操作
- 二叉树的遍历及线索二叉树
- c语言实现线索二叉树的建立,线索化以及遍历
- 盗版XP成主要恶意攻击对象
- android Toast显示消息的几种方法
- oracle 11g exp导出空表
- tableview cell的移动
- Oracle Transportable TableSpace(TTS) 传输表空间 说明
- 线索二叉树的建立及遍历
- 解决tomcat在大进行大并发请求时,出现内存溢出的问题
- nyist.acm喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3
- Oracle和Vertica中构造日历数据
- 你所不知道的Java序列化
- 在驱动模块初始化函数中实现设备节点的自动创建
- UML中的用例图和类图
- 面向对象——(4)静态方法
- Oracle和Vertica中构造日历数据