首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
timezone
timestamp
iostream
ip
function
jsp
jar
stream
const
client
java
erlang
web
replace
export
chat
bitmap
object
数组
char
scala
range
testing
lua
less
buffer
dll
expression
keyword
integer
controller
substring
bit
main
copy
spring
plugins
format
io
datetime
netty
python3
regex
input
c语言
foreach
subset
ascii
dagger
process
command
install
heatmap
typescript
flutter
triggers
case
window
js
md5
php5
blob
python
grid
bash
email
hash
request
require
callback
future
uml
emoji
nodejs
random
int
match
cmd
hashtable
当前位置:
开发笔记
>
编程语言
> 正文
二叉树层序创建问题的解决方法
作者:慌瓜 | 来源:互联网 | 2023-12-13 18:20
本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。
#include
#include
struct queue //队列结构体
{
struct tree * data[20];
int front;
int reat;
};
struct tree //二叉树 结构体
{
char data;
struct tree *left;
struct tree *right;
};
void rudui(struct queue *p,struct tree *val);
bool panduan(struct queue *p);
struct tree * chudui(struct queue *p);
struct tree *create (void);
void xianxubianli(struct tree *p);
int main(void)
{
struct tree *p=create();//动态创建二叉树
xianxubianli(p); //先序遍历
return 0;
}
void rudui(struct queue *p, struct tree *val) //入队
{
if(panduan(p))
printf("队列已满\n");
else
p->data[p->reat]=val;
p->reat=(p->reat+1)%20;
return;
}
bool panduan(struct queue *p) //判断队列是否满了
{
if(p->frOnt==(p->reat+1)%20)
return true;
else
return false;
}
struct tree * chudui(struct queue *p) //出队
{
struct tree *T;
if(p->front!=p->reat)
{
T=p->data[p->front];
p->frOnt=(p->front+1)%20;
}
else
printf("队列为空\n");
return T;
}
struct tree *create (void) //层序创建二叉树
{
char data; //根结点存放的数据
char dataleft; //左子树存放的数据
char dataright; //右子树存放的数据
struct queue Q;
Q.frOnt=0;
Q.reat=0;
struct tree *BT,*T; //BT是根结点,T是子结点
scanf("%d",&data);
if(data!=0)
{
BT=(struct tree*)malloc(sizeof(struct tree));
BT->data=data;
rudui(&Q,BT);
}
else
return NULL;
while(Q.front!=Q.reat)
{
T=chudui(&Q);
scanf("%d",&dataleft);
if(dataleft==0)
T->left=NULL;
else
T->left=(struct tree*)malloc(sizeof(struct tree));
T->left->data=dataleft;
scanf("%d",&dataright);
if(dataright==0)
T->right=NULL;
else
T->right=(struct tree*)malloc(sizeof(struct tree));
T->right->data=dataright;
}
return BT;
}
void xianxubianli(struct tree *p)
{
if(p)
{
printf("%c ",p->data);
xianxubianli(p->left);
xianxubianli(p->right);
}
return;
}
程序是用层序创建二叉树(通过入队出队),大神帮我看看哪里出错了?
5 个解决方案
#1
while循环里面的else语句缺少花括号
#2
引用 1 楼 qq_28273387 的回复:
while循环里面的else语句缺少花括号
改了还是不行啊,能帮我改改吗
#3
两个else语句都要加花括号
#4
调试结果截图给我看下
#5
#include
using namespace std;
#include
#include
struct queue //队列结构体
{
struct tree * data[20];
int front;
int reat;
};
struct tree //二叉树 结构体
{
char data;
struct tree *left;
};
void rudui(struct queue *p, struct tree *val);
bool panduan(struct queue *p);
struct tree * chudui(struct queue *p);
struct tree *create(void);
void xianxubianli(struct tree *p);
int main(void)
{
struct tree *p = create();//动态创建二叉树
xianxubianli(p); //先序遍历
system("pause");
return 0;
}
void rudui(struct queue *p, struct tree *val) //入队
{
if (panduan(p))
printf("队列已满\n");
else
p->data[p->reat] = val;
p->reat = (p->reat + 1) % 20;
return;
}
bool panduan(struct queue *p) //判断队列是否满了
{
if (p->front == (p->reat + 1) % 20)
return true;
else
return false;
}
struct tree * chudui(struct queue *p) //出队
{
struct tree *T;
if (p->front != p->reat)
{
T = p->data[p->front];
p->front = (p->front + 1) % 20;
return T;
}
else
printf("队列为空\n");
return 0;
}
struct tree *create(void) //层序创建二叉树
{
char data; //根结点存放的数据
char dataleft; //左子树存放的数据
char dataright; //右子树存放的数据
struct queue Q;
Q.front = 0;
Q.reat = 0;
struct tree *BT, *T; //BT是根结点,T是子结点
cin>>data;
if (data != 0)
{
BT = new tree();
BT->data = data;
rudui(&Q, BT);
}
else
return NULL;
while (Q.front != Q.reat)
{
T = chudui(&Q);
cin >>dataleft;
if (dataleft == 0)
T->left = NULL;
else{
T->left = new tree();
T->left->data = dataleft;
}
cin>>dataright;
if (dataright == 0)
T->right = NULL;
else{
T->right = new tree();
T->right->data = dataright;
}
}
return BT;
}
void xianxubianli(struct tree *p)
{
if (p)
{
printf("%c ", p->data);
xianxubianli(p->left);
xianxubianli(p->right);
}
return;
}
include
io
struct
queue
队列
tree
int
char
main
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
const
差分约束系统求解House Man跳跃问题的思路与方法
本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ...
[详细]
蜡笔小新 2023-12-14 11:49:51
char
李逍遥寻找仙药的迷阵之旅
本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ...
[详细]
蜡笔小新 2023-12-12 13:59:33
char
Codeforces Round #321 (Div. 2) Kefa and Dishes 状压+spfa
本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ...
[详细]
蜡笔小新 2023-12-11 10:37:34
ip
九度OnlineJudge之1002:Grading问题的解决方法
本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ...
[详细]
蜡笔小新 2023-12-14 13:00:09
char
油田地块的划分和计数方法
本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ...
[详细]
蜡笔小新 2023-12-14 09:18:20
数组
P1651 塔 (动态规划) 的最大高度计算方法
本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ...
[详细]
蜡笔小新 2023-12-13 19:52:19
数组
3.223.28周学习总结中的贪心作业收获及困惑
本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ...
[详细]
蜡笔小新 2023-12-13 03:42:02
const
hdu 5439(找规律)的数列求和问题
本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ...
[详细]
蜡笔小新 2023-12-12 14:05:58
char
STL迭代器的种类及其功能介绍
本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ...
[详细]
蜡笔小新 2023-12-10 15:17:25
char
C++省略号类型和参数个数不确定函数参数范例
本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ...
[详细]
蜡笔小新 2023-12-14 12:36:28
char
c语言\n不换行,c语言printf不换行
本文目录一览:1、C语言不换行输入2、c语言的 ...
[详细]
蜡笔小新 2023-12-14 11:05:35
char
clone的fork与pthread_create创建线程有何不同
本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ...
[详细]
蜡笔小新 2023-12-12 20:00:06
数组
java boolean 大小_java boolean 大小
先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ...
[详细]
蜡笔小新 2023-12-12 13:36:56
数组
如何在跨函数中使用内存?
本文介绍了在跨函数中使用内存的方法,包括使用指针变量、动态分配内存和静态分配内存的区别。通过示例代码说明了如何正确地在不同函数中使用内存,并提醒程序员在使用动态分配内存时要手动释放内存,以防止内存泄漏。 ...
[详细]
蜡笔小新 2023-12-11 19:06:43
char
实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ...
[详细]
蜡笔小新 2023-12-10 21:26:32
慌瓜
这个家伙很懒,什么也没留下!
Tags | 热门标签
timezone
timestamp
iostream
ip
function
jsp
jar
stream
const
client
java
erlang
web
replace
export
chat
bitmap
object
数组
char
scala
range
testing
lua
less
buffer
dll
expression
keyword
integer
RankList | 热门文章
1
Linux之top命令分析
2
上海电信宽带用机房改路由器拨号后,自己搞着带光线口的路由可以直接负责拨号么?
3
选择海外服务器代理商应该怎么考察
4
win7系统常用美化方法
5
路由器怎么登录宽带账号? 路由器设置网址登录
6
avi转mp4用什么软件 相关软件推荐和使用方法
7
如何让自家路由器更安全?
8
华为数据治理框架
9
《光环:士官长合集》steam开启免费周末,迅游助力玩家畅游
10
userland免root运行linux,UserLAnd(GNU/Linux安装)
11
【Docker】 简介
12
Rainlendar(桌面日历)
13
基于嵌入式linux,基于嵌入式Linux系统.pdf
14
有人盗用我的宽带账号,怎么办???
15
这年头腾讯的六字真言太强大DNF怎么玩
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有