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

求代码:实现二叉树中所有结点左右子树的交换

发布网友 发布时间:2022-05-21 16:32

我来回答

3个回答

热心网友 时间:2023-11-02 06:13

#include<stdio.h>
#include<stdlib.h>
#define max 20//定义树的结点数
#define null 0
typedef struct btnode//定义二叉树结点类型
{
char date;//结点数据类型
struct btnode *lc,*rc;//左右指针
}bttree;
bttree *createtree(char *str,int i,int m)//将字符串str中第i到第m个字符创建树
{
bttree *p;
if(i>=m)
return null;
p=(bttree*)malloc(sizeof(bttree));//生成新结点
p->date=str[i];//将结点的第一个数据付给根
p->lc=createtree(str,2*i+1,m);//创建左子树
p->rc=createtree(str,2*i+2,m);//创建右子树
return (p);
}
bttree *jiaohuan(bttree *p)//将p指针指向的二叉树的左右子树进行互换。
{
bttree *stack[max];//指针类型的堆栈
int k;
k=0;
stack[k]=null;
if(p!=null)//交换p结点的左右孩子
{
k++;
stack[k]=p->lc;
p->lc=p->rc;
p->rc=stack[k];
p->lc=jiaohuan(p->lc);
p->rc=jiaohuan(p->rc);
}
return (p);
}
void xiangen(bttree *t)//先跟遍历
{
if(t!=null)
{
printf("%c",t->date);
if(t->lc)
{
printf("->");
xiangen(t->lc);
}
if(t->rc)
{
printf("->");
xiangen(t->rc);
}
}
}
void zhonggen(bttree *p)//中根遍历即中序遍历
{
if(p!=null)
{
zhonggen(p->lc);
printf("%c",p->date);
printf("->");
zhonggen(p->rc);
}
}
void hougen (bttree *p)//后根遍历
{
if(p!=null)
{
hougen(p->lc);
hougen(p->rc);
printf("%c",p->date);
printf("->");
}
}
void cengci(bttree *t,int m)//按层次遍历
{
bttree *queue[max];
bttree *p;
int front=0,rear=0,i;
queue[rear++]=t;
while(front!=rear)
{
p=queue[front];
front=(front+1)%m;
printf("%c->",p->date);//输出根结点
if(p->lc!=null)//遍历左子树
{
if((rear+1)%m!=front)
{
queue[rear]=p->lc;
rear=(rear+1)%m;
}
}
if(p->rc!=null)//遍历右子树
{
if((rear+1)%m!=front)
{
queue[rear]=p->rc;
rear=(rear+1)%m;
}
}
}
}
int main()
{
int i,n;
char str[max];
bttree *root;//二叉树根结点的指针
printf("请输入根结点数目n:");
scanf("%d",&n);
getchar();
printf("请输入%d个结点:",n);
for(i=0;i<n;i++)
str[i]=getchar();
printf("\n\n");
root=createtree(str,0,n);
printf("层次遍历是:\n");
cengci(root,n);
printf("\n先根遍历是:\n");
xiangen(root);
printf("\n中根遍历是:\n");
zhonggen(root);
printf("\n后根遍历是:\n");
hougen(root);
printf("\n\n");
root=jiaohuan(root);//交换左右子树
printf("左右子树交换后!\n");
printf("层次遍历是:\n");
cengci(root,n);
printf("\n先根遍历是:\n");
xiangen(root);
printf("\n中根遍历是:\n");
zhonggen(root);
printf("\n后根遍历是:\n");
hougen(root);
printf("\n\n");
system("pause");
}



热心网友 时间:2023-11-02 06:14

求代码:实现二叉树中所有结点左右子树的交换
mp在这里的作用是中间变量,负责将左右孩子的指针调换
相当于我们常见的将a和b的值调换时的操作
(temp = a; a = b; b = temp)

正确的代码体现了这点,而你的代码出现了错误了,解释如下

temp = new NiTNode;//这里没有问题,但是是多余的
//但从你程序上看,你并不清楚,接下来我再说
temp = bt -

热心网友 时间:2023-11-02 06:14

mp在这里的作用是中间变量,负责将左右孩子的指针调换
相当于我们常见的将a和b的值调换时的操作
(temp = a; a = b; b = temp)

正确的代码体现了这点,而你的代码出现了错误了,解释如下

temp = new NiTNode;//这里没有问题,但是是多余的
//但从你程序上看,你并不清楚,接下来我再说
temp = bt -
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
墨兰烂根是怎么回事 墨兰烂根后如何养护 谢绝推销参观拍照摄影看房预约 看房子为什么不让拍照 执业药师各科考试时间分配 执业药师考试倒计时100天,怎样备考最有效 中药执业药师怎么备考? 手机拒绝所有来电了怎么设置回来 美国狼人在伦敦演职员表 美国狼人在伦敦幕后制作 美国狼人在伦敦制作发行 苹果6P昨晚睡觉前拔得电源,开的省电模式,只有QQ和微信两个后台,没有联网。 清亮的鸡蛋汤的做法 苹果手机通话记录找回 萨达姆绞刑视频 素描作品,相对简单一些的,我要图片 刚买的新手机,电池不耐用,有办法吗 黄瓜焖鲫鱼的做法,黄瓜焖鲫鱼怎么做好吃,黄瓜 大保龙快乐成长片牛初乳钙片 大保龙跟汤臣倍健哪个好 怀孕吃什么牌子钙片补钙效果最好 20年的桂花树价值怎么算呢? 25年的桂花树(金桂),高6米,树冠5米,树径15公分,价值多少? 20年桂花的价格是多少? 广州永久美生物科技有限公司生产的化妆品有哪些 二十多年树龄的桂花树结果了。这棵桂花树值多少钱? Java开发行业前景怎么样?会不会很快淘汰掉? Java程序员已经饱和了吗 美敏达化妆品 现在的java程序员泛滥了吗?? 为什么工作那么难找? 为什么现在那么多培训机构出来的程序员,对于上海趋之若鹜,如今的Java基层程序员已经烂大街了 减肥可以吃什么食物清单 哪位减肥成功者,能列出一个食物清单? 减肥饮食 经常吃哪些蔬菜,是可以起到养胃的效果呢? 请问有哪些蔬菜是养胃的! 常吃煎鸡蛋特别好到句子 煎鸡蛋的做法并说说情感体验 节假日生产注意什么?应如何培训员工注意生产安全? 节假日特殊安全教育有哪些内容? 单位安全教育每次节假日培训,不去把我迟退了,这合法吗? 学生节假日安全教育 为什么羽绒服有鸭毛味?怎么去除? 中国银行福建长城印象大红袍联名IC卡适用对象 印象大红袍在哪? 福建省首个大型山水实景剧-《印象大红袍》2010年在武夷山上演。它以其独特的创意、新颖的演出方式和现代 福建省首个大型山水实景剧——《印象大红袍》以其独特的创意、新颖的演出方式和现代演艺技术,展现了武夷 印象大红袍股份有限公司怎么样? 关于看印象大红袍的作文400字 印象大红袍地址,电话? 张艺谋在福建武夷山导演的演出叫什么