数据结构——中序线索化二叉树
2010-08-02 10:49
274 查看
#include <iostream> using namespace std; typedef enum PointerTag {Link,Thread}; //Link==0,Thread==1;线索 typedef struct treenode { struct treenode *left; char data; struct treenode *right; PointerTag Ltag,Rtag; //左右标志 }Treenode,* Treep; Treep pre; /*全局变量,用于二叉树的线索化*/ //初始化二叉树 void init_tree(Treep &root) { root=NULL; cout<<"初始化成功!"<<endl; } //创建二叉树 void creat_tree(Treep &rt) { char ch; ch=getchar(); if('#'==ch) rt=NULL; else { rt=(Treep )malloc(sizeof(Treenode)); rt->data=ch; rt->Ltag=Link; rt->Rtag=Link; creat_tree(rt->left); //构造左子树 creat_tree(rt->right); //构造右子树 } } //前序遍历二叉树 void pre_order(Treep &rt) { if(rt!=NULL) { cout<<rt->data<<" "; pre_order(rt->left); pre_order(rt->right); } } //中序线索化二叉树 void InThreading(Treep &p) { if(p) { InThreading(p->left); if(!p->left) { p->Ltag=Thread; p->left=pre; //前继线索 } if(!pre->right) { pre->Rtag=Thread; pre->right=p; //后继线索 } pre=p; InThreading(p->right); } }//InThreading Treep InorderThreading(Treep &rt) { Treep thrt; if( !(thrt = (Treep) malloc (sizeof(Treenode) ) ) ) exit(1); thrt->Ltag=Link; thrt->Rtag=Thread; //建头结点 thrt->right=thrt; //右指针回指 if(!rt) thrt->left=thrt; //若二叉树空,则左指针回指 else { thrt->left=rt; pre=thrt; InThreading(rt); //中序遍历进行中序线索化 pre->right=thrt; pre->Rtag=Thread; thrt->right=pre; } return thrt; } //中序遍历线索二叉树 void InorderTraver(Treep &thrt) { Treep p; p=thrt->left; while(p!=thrt) { while(p->Ltag==Link) p=p->left; cout<<p->data<<" "; while(p->Rtag==Thread && p->right!=thrt) { p=p->right; cout<<p->data<<" "; } p=p->right; } } int main() { Treep root; init_tree(root); //初始化树 cout<<"请输入二叉树,空值以#代表,输完要以Ctrl+Z表示结束,否则影响下个树的创建!:"<<endl; creat_tree(root); //创建二叉树 //前序遍历二叉树 cout<<"前序遍历序列是:"<<endl; pre_order(root); cout<<endl; Treep thrt; thrt=InorderThreading(root); InorderTraver(thrt); cout<<endl; return 0; }
相关文章推荐
- 【数据结构】中序线索化二叉树后实现一个迭代器来遍历二叉树
- 2015年大二上-数据结构-树和二叉树-2-(4)中序线索化二叉树
- 【算法与数据结构】二叉树 中序线索
- 第十一周--数据结构--线索化二叉树(中序)
- 【算法与数据结构】二叉树 中序线索
- 【C++】中序线索化二叉树及其遍历
- 中序线索化二叉树
- (c语言)二叉树中序线索(数据结构十七)
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 第十一周项目1 - 二叉树算法验证(3)中序线索化二叉树的算法验证
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 数据结构-二叉树(递归前序、中序、后序遍历;栈实现中序变量;二叉树镜像)
- 第十周项目一 验证算法(3)中序线索化二叉树的算法验证
- 中序线索化二叉树
- 第10周项目1(3)中序线索化二叉树的算法验证
- 第十一周项目1-二叉树算法验证(中序线索化二叉树的算法验证 )
- 第十周 项目4 - 线索化二叉树(中序)
- 数据结构--二叉树--中序非递归遍历二叉树(链式结构)
- 数据结构--二叉树的线索化