线索二叉树的线索数是什么(线索二叉树)

 2024-01-15  阅读 13  评论 0

摘要:大家好,我是小环,我来为大家解答以上问题。线索二叉树的线索数是什么,线索二叉树很多人还不知道,现在让我们一起来看看吧!1、#include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct Threadnode { int ltag,rtag; char date[20]; struct Threadnode *lch

大家好,我是小环,我来为大家解答以上问题。线索二叉树的线索数是什么,线索二叉树很多人还不知道,现在让我们一起来看看吧!

1、#include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct Threadnode { int ltag,rtag; char date[20]; struct Threadnode *lchild, *rchild; } Threadnode, *ThreadTree; ThreadTree pre=NULL; void visite(char * ch) { printf("输出节点信息:"); printf("%s",ch); } //初始化二叉树 ThreadTree CreatThreadTree(char ch[]) { ThreadTree t; char ch1[20],ch2[20]; t=( ThreadTree )malloc(sizeof(Threadnode)); strcpy(t->date,ch); printf("请输入左子树的数值,结束输入0:"); scanf("%s",ch1); if(strcmp(ch1,"0")==0) { t->ltag=1; t->lchild=NULL; } else { t->ltag=0; t->lchild=CreatThreadTree(ch1); } printf("请输入右子树的数值,结束输入0:"); scanf("%s",ch2); if(strcmp(ch2,"0")==0) { t->rtag=1; t->rchild=NULL; } else {t->rtag=0; t->rchild=CreatThreadTree(ch2); } return t; } //建立中序线索二叉树算法实现 void InThread (ThreadTree t) { if (t) { InThread(t->lchild); if (t->lchild==NULL) { t->ltag=1; t->lchild=pre; } if (t->rchild==NULL) t->rtag=1; if ((pre)&&(pre->rtag==1)) pre->rchild=t; pre=t; InThread (t->rchild); } } //在中序线索二叉树上寻找结点p的中序后继结点的算法: ThreadTree InPostNode(ThreadTree p) { ThreadTree post; post=p->rchild; if (p->rtag==0) while (post->ltag==0) post=post->lchild; return (post); } // 在中序线索二叉树上查找值为X的结点 ThreadTree Search (ThreadTree t,char x[] ) { ThreadTree p; p=t; if (p) { while (p->ltag==0) p=p->lchild; while (p&&strcmp(p->date,x)!=0) p= InPostNode (p); } return p; } //在中序线索二叉树上寻找结点p的中序前驱结点的算法: ThreadTree InPreNode(ThreadTree p) { ThreadTree prel; prel=p->lchild; if (p->ltag==0) while (prel->rtag==0) prel= prel->rchild; printf("结点p的中序前驱结点信息!"); visite(prel->date); return(prel); } // 中序线索二叉树的遍历算法 void InOrderTh ( ThreadTree t) { ThreadTree p; if (t) { p=t; while (p->ltag==0) p=p->lchild; while (p) { visite(p->date); p= InPostNode (p); } } } void main() { ThreadTree t,p; char ch[20],x[20]; int flag=1; while(flag){ printf("请选择需要进行的操作:"); printf("1:创建二叉树"); printf("2:线索二叉树"); printf("3:中序线索二叉树"); printf("4:寻找结点p的中序前驱结点"); printf("5:寻找结点p的中序后继结点"); printf("6:查找值为X的结点"); printf("0:退出!"); scanf("%d",&flag); switch(flag){ case 1 : printf("开始创建二叉树"); printf("请输入一个数值:"); scanf("%s",ch); t=CreatThreadTree(ch); printf("");break; case 2: printf("开始线索二叉树!"); InThread (t) ;break; case 3: printf("中序线索二叉树!"); InOrderTh ( t) ;break; case 4://在中序线索二叉树上寻找结点p的中序前驱结点的算法: printf("输入P节点信息。

2、以方便查找"); scanf("%s",x); printf("寻找结点p的中序前驱结点!"); p=Search (t,x) ; InPreNode( p); break; case 5://在中序线索二叉树上寻找结点p的中序后继结点的算法: printf("输入P节点信息,以方便查找!"); scanf("%s",x); printf("结点p的中序后继结点信息!"); printf("寻找结点p的中序后继结点!"); p=Search (t,x) ; p=InPostNode( p); visite(p->date); break; case 6:// 在中序线索二叉树上查找值为X的结点 printf("请输入查找的数值!"); scanf("%s",x); p=Search(t,x); if(p) printf("查找成功!"); else printf("查找失败!"); break; default:break; } if(flag!=0) printf("****************请选择操作*****************"); } }。

本文到此讲解完毕了,希望对大家有帮助。

免责声明:本文由用户上传,如有侵权请联系删除!

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://www.sast-sy.com/ea534BD0CBwNUUgYG.html

标签:线索二叉树

发表评论:

管理员

  • 内容1434378
  • 积分0
  • 金币0

Copyright © 2022 四叶百科网 Inc. 保留所有权利。 Powered by ZFCMS 1.1.2

页面耗时0.2010秒, 内存占用1.72 MB, 访问数据库18次

粤ICP备21035477号