问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

线索二叉树

发布网友 发布时间:2022-03-31 18:17

我来回答

1个回答

热心网友 时间:2022-03-31 19:46

#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("\n输出节点信息:");
printf("%s",ch);

}
//初始化二叉树

ThreadTree CreatThreadTree(char ch[])
{
ThreadTree t;
char ch1[20],ch2[20];

t=( ThreadTree )malloc(sizeof(Threadnode));
strcpy(t->date,ch);
printf("\n请输入左子树的数值,结束输入0:\n");
scanf("%s",ch1);
if(strcmp(ch1,"0")==0)
{
t->ltag=1;
t->lchild=NULL;
}
else
{ t->ltag=0;
t->lchild=CreatThreadTree(ch1);
}
printf("\n请输入右子树的数值,结束输入0:\n");
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("\n结点p的中序前驱结点信息!\n");
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("\n请选择需要进行的操作:\n");
printf("\n1:创建二叉树\n");
printf("\n2:线索二叉树\n");
printf("\n3:中序线索二叉树\n");
printf("\n4:寻找结点p的中序前驱结点\n");
printf("\n5:寻找结点p的中序后继结点\n");
printf("\n6:查找值为X的结点\n");
printf("\n0:退出!\n\n");
scanf("%d",&flag);

switch(flag){

case 1 :
printf("\n开始创建二叉树\n");
printf("\n请输入一个数值:");
scanf("%s",ch);
t=CreatThreadTree(ch);
printf("\n\n\n\n\n");break;
case 2:
printf("\n开始线索二叉树!\n");
InThread (t) ;break;
case 3:
printf("\n中序线索二叉树!\n");
InOrderTh ( t) ;break;
case 4://在中序线索二叉树上寻找结点p的中序前驱结点的算法:
printf("\n输入P节点信息,以方便查找\n");
scanf("%s",x);
printf("\n寻找结点p的中序前驱结点!\n");
p=Search (t,x) ;
InPreNode( p);
break;
case 5://在中序线索二叉树上寻找结点p的中序后继结点的算法:
printf("\n输入P节点信息,以方便查找!\n");
scanf("%s",x);
printf("\n结点p的中序后继结点信息!\n");

printf("\n寻找结点p的中序后继结点!\n");
p=Search (t,x) ;
p=InPostNode( p);
visite(p->date);
break;
case 6:// 在中序线索二叉树上查找值为X的结点
printf("\n请输入查找的数值!\n");
scanf("%s",x);
p=Search(t,x);
if(p) printf("\n查找成功!\n\n"); else printf("\n查找失败!\n\n");
break;
default:break;
}
if(flag!=0)
printf("\n****************请选择操作*****************\n");
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高考560分能上211大学吗? - 知乎 河北高考多少分能上211大学 河北2023高考211分数线是多少? 考560分能上211大学吗河北 刀剑英雄合王者武器多少费用 刀剑英雄帝辰王者现在什么价位 2021年度工程施工合同范本 2021承包转让简单的合同范本 2021医院食堂承包合同范本 div+css+js实现菜单的收缩与展开 调用数据库内容的时候为什么内容字段... 拼多多那个砍价靠谱吗? 线索二叉树的概念 拼多多砍价神器哪个好用,拼多多砍价群怎么加? oppo手机1107自动开关机如何手动刷机 线索二叉树的应用 笔记本电脑怎么调出屏幕键盘 怎样把笔记本电脑上的小键盘打开 怎么线索二叉树? 交通银行信用卡预授权完成后多少天到账 七年级下册四字成语解释造句 今天信用卡银行一直给我发预授权完成好多元是什么意思 pre预授权是什么意思 404 Not Found 广东人回收锂电池是真的吗 什么是信用卡预授权完成撤销? 苹果8p自动重启在上海黄浦区附近哪里能维修? 什么是“信用卡预授权” iphone8plus在没有退出ID的时恢复厂设置,后又被抹掉 锂电池这么成熟,为什么不把家用车的电池都给换成锂电池? 苹果8p手机自动重启解决不了怎么办? 亲爱的妈妈,用英语怎么说 亲爱的妈妈!母亲节快乐!我爱您!这句话英语怎么翻译 我亲爱的妈妈英语 我爱你妈妈用英语怎么写? 祝亲爱的妈妈母亲节快乐英文怎么写 “亲爱的妈妈,您辛苦了,我爱您”的英语怎么写 请把中文翻译成英文:亲爱的妈妈:祝您母亲节快乐!健康、幸福、美丽百分! 亲爱的妈妈今天是情人节祝你情人节快乐天天开心用英语怎么写? 亲爱的妈妈,我们向您致敬用英语怎么说? 亲爱的妈妈的英语作文80词带翻译 亲爱的妈妈,你同意嘛! 的英文 线索二叉树 线索化函数的参数pre前为什么要加引用&? 怎样教孩子学习10以内的加减法并且熟练记住,谢谢 p图照片的软件有哪些? 求一款单反数码相机照片后期处理软件? 华为nova7por有没有呼吸灯,怎么开? 华为nova7充电指示灯在哪里 单反相机照片处理哪款软件比较好用 404 Not Found 数码相机图片处理用哪个软件好