数据结构(十四) 线索二叉树讲解(不带头节点中序加线索) 以及实现的完整代码

来源:互联网 发布:软件服务商合作模式 编辑:程序博客网 时间:2024/04/28 16:54

中序线索话何上一篇博客的前序加线索化思路是一样的。

下面是实现的代码:

//为二叉链表加中序线索化 (不带头节点)#include <iostream>using namespace std;//线索化的结构体 typedef struct Node{char data;int ltag;int rtag;struct Node *lchild;struct Node *rchild;}*BiTree;//pre为前驱节点。为全局变量 ,初始化时右子树为空 BiTree pre;//中序实现创建二叉树 void createBiTree(BiTree &Tree){char data;cin>>data;if(data=='#'){Tree = NULL;}else{Tree = new Node();Tree->data = data;Tree->ltag = 0;Tree->rtag=0;createBiTree(Tree->lchild);createBiTree(Tree->rchild);}}//中序线索化的实现void function(BiTree &Tree){if(Tree){function(Tree->lchild);if(Tree->lchild==NULL){Tree->ltag=1;Tree->lchild=pre;}if(pre->rchild==NULL){pre->rtag=1;pre->rchild=Tree;}pre = Tree;function(Tree->rchild);}}//中序遍历  左根右 void preBiTree(BiTree Tree){if(Tree==NULL){cout<<"是空数\n";exit(1);}while(Tree!=NULL){while(Tree!=NULL&&Tree->ltag==0){Tree = Tree->lchild;}cout<<Tree->data<<" ";while(Tree!=NULL&&Tree->rtag==1){Tree = Tree->rchild;cout<<Tree->data<<" ";}Tree=Tree->rchild;}} int main(){BiTree Tree;cout<<"请输入你要创建的二叉树的数据(按先序遍历创建的二叉树#为空节点的表示)\n";createBiTree(Tree);pre = new Node();pre->lchild=NULL; function(Tree);preBiTree(Tree);return 0;}


0 0