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

C语言中如何实现二叉树的创建和不同遍历方法?

发布网友 发布时间:2024-05-08 20:46

我来回答

1个回答

热心网友 时间:2024-05-12 16:55

深入理解二叉树的遍历,让我们通过C语言实现非递归遍历算法,首先,定义结构体和基本函数如下:



<stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct node *lchild, *rchild;
} treetp, tree;</

函数`create(treetp t, int c)`用于创建新的节点,输入节点和整数:



treetp create(treetp t, int c) {
treetp p, di;
while (c != 0) {
scanf("%d", &c);
if (t == 0) {
t = (treetp)malloc(sizeof(tree));
t->lchild = t->rchild = 0;
t->data = c;
} else {
p = t;
while (p != 0) {
di = p;
if (c < p->data) {
p = p->lchild;
} else {
p = p->rchild;
}
if (c < di->data) {
treetp NEWdi = (treetp)malloc(sizeof(tree));
di->lchild = NEWdi;
NEWdi->lchild = NEWdi->rchild = 0;
NEWdi->data = c;
} else {
treetp NEWdi = (treetp)malloc(sizeof(tree));
di->rchild = NEWdi;
NEWdi->lchild = NEWdi->rchild = 0;
NEWdi->data = c;
}
}
++number;
}
}
printf("叶子的数量:%d</", number);
return t;
}</

接下来,我们分别实现三种遍历方法:前序、中序和后序遍历,它们的逻辑递归地调用自身:




void print1(treetp t) {
if (t != 0) {
printf("%d", t->data);
print1(t->lchild);
print1(t->rchild);
}
}
void print2(treetp t) {
if (t != 0) {
print2(t->lchild);
printf("%d", t->data);
print2(t->rchild);
}
}
void print3(treetp t) {
if (t != 0) {
print3(t->lchild);
print3(t->rchild);
printf("%d", t->data);
}
}</

在主函数中,我们调用这些函数展示非递归遍历的效果:




int main() {
treetp t = 0, r;
r = create(t, 0);
printf("前序排列:</");
print1(r);
printf("中序排列:</");
print2(r);
printf("后序排列:</");
print3(r);
return 0;
}
</

以上就是C语言实现的二叉树非递归遍历算法,通过这个实例,希望你对二叉树遍历有更深入的理解。如果你有任何疑问或想要进一步探讨,欢迎随时提问。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
whirlpool如何制热 如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 曾志伟跟成龙比谁更有实力 男生晒衣服正确方法男生晒衣服正确方法是什么 中国婚姻法,分居多少年算离婚 为什么我时常会梦见一所屋子,外观我很熟悉,屋里的样子却不同于现实... 柏丁酒店是连锁酒店吗 轨道10号线渝中到南坪过什么桥 重庆地铁10号线二期南滨路至鲤鱼池段实现轨通 特色餐饮的举例 离铁路边上多远才能搞养殖啊? 高铁两侧多少米不能有养殖场 铁路两侧100米能养肉鸽吗 高铁两侧多少米禁止畜牧养殖 Usher &amp; Alicia Keys的《My Boo》 歌词 淘宝怎么关闭退款申请呢? 新闻女生组赵佳的身高是多少啊 拼多多退款的商品签收后还能申请退款吗? 推理之绊中艾斯在“诅咒之子”的地位是什么? ...一季2018年上映的由 马场富美加主演的在线免费播放资源 纨绔太子中月心幽什么时候恢复记忆的 具体章节 我想查一个人的手机型号怎么查呢? 如果一个人你对他没感觉了,你还会继续下去吗? 日本核辐射对海产品影响时间?能达到几年吗? 团鬼六捆绑吊缚折磨花蛇折磨2009年凯文迪恩主演英国电影简介 诗句花有重开日人无再少年出自哪位诗人 自己从树上摘的白果怎么吃? 马克笔弄到衣服上能洗吗? win10网速变得很慢是什么情况? 如何隐藏好友 行政诉讼第三人上诉的流程 火车票取票后丢了怎么办 火车票在没发车前丢了到车站补票要钱吗 科目一可以在双休日进行考试吗? 皮肤抗菌膏能治疗所有皮肤病吗? 宣威火车站可以过夜停车吗? 请问K110次列车在宣威站停车吗 星期五的课有语文,数学,英语,地理,音乐 亚辉龙安徽代理商是哪个 I want to write letters to you 的意思 write letters to your friends等于什么 they write letters to their pen pas no的write改成什么?