首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
hashtable
httpclient
callback
timezone
flutter
fetch
cPlusPlus
cSharp
require
filter
select
iostream
shell
cmd
hash
vbscript
audio
metadata
controller
javascript
tree
hashcode
regex
testing
post
split
java
io
rsa
bitmap
chat
python2
less
plugins
settings
future
actionscrip
loops
heap
python3
config
yaml
cookie
byte
function
const
php7
js
nodejs
text
web3
erlang
solr
utf-8
char
expression
dagger
search
emoji
dockerfile
netty
c语言
join
match
hashset
install
md5
typescript
datetime
import
integer
replace
copy
golang
main
buffer
heatmap
include
foreach
当前位置:
开发笔记
>
编程语言
> 正文
二叉树层序创建问题的解决方法
作者:慌瓜 | 来源:互联网 | 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
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
io
Weight the Tree(树形dp)
题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!----- ...
[详细]
蜡笔小新 2024-12-26 15:55:56
io
使用Objective-C和dispatch库实现并发素数计算
本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ...
[详细]
蜡笔小新 2024-12-28 08:44:35
io
Linux设备驱动程序:异步时间操作与调度机制
本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ...
[详细]
蜡笔小新 2024-12-26 08:55:03
io
Codeforces Round #566 (Div. 2) A~F个人题解
Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ...
[详细]
蜡笔小新 2024-12-25 18:41:21
io
Tetris 排名系统 (拓扑排序与并查集的应用)
本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ...
[详细]
蜡笔小新 2024-12-24 21:03:51
io
深入理解KMP算法中的next数组:北大OJ 2406题解
本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ...
[详细]
蜡笔小新 2024-12-28 11:30:01
io
UNP 第9章:主机名与地址转换
本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ...
[详细]
蜡笔小新 2024-12-27 11:26:39
io
扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]
学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ...
[详细]
蜡笔小新 2024-12-26 20:04:36
io
C语言链表动态创建:头插法与尾插法详解
本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ...
[详细]
蜡笔小新 2024-12-26 13:59:07
io
VxWorks中的双向链表与环形缓冲应用
本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ...
[详细]
蜡笔小新 2024-12-26 13:26:16
io
洛谷 P4116 树上操作:颜色变换与路径查询
本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ...
[详细]
蜡笔小新 2024-12-26 10:22:20
io
CUGB图论专题:排水系统中的最大流问题 - EK与Dinic算法解析
本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ...
[详细]
蜡笔小新 2024-12-25 17:47:23
io
深入理解线程局部存储
在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ...
[详细]
蜡笔小新 2024-12-25 17:04:36
io
2-SAT问题学习笔记
本文介绍了一种解决二元可满足性(2-SAT)问题的方法。通过具体实例,详细解释了如何构建模型、应用算法,并提供了编程实现的细节和优化建议。 ...
[详细]
蜡笔小新 2024-12-24 21:48:43
io
数据结构入门:栈的基本概念与操作
本文详细介绍了栈这一重要的数据结构,包括其基本概念、顺序存储结构、栈的基本操作(如入栈、出栈、清空栈和销毁栈),以及如何利用栈实现二进制到十进制的转换。通过具体代码示例,帮助读者更好地理解和应用栈的相关知识。 ...
[详细]
蜡笔小新 2024-12-24 13:47:59
慌瓜
这个家伙很懒,什么也没留下!
Tags | 热门标签
hashtable
httpclient
callback
timezone
flutter
fetch
cPlusPlus
cSharp
require
filter
select
iostream
shell
cmd
hash
vbscript
audio
metadata
controller
javascript
tree
hashcode
regex
testing
post
split
java
io
rsa
bitmap
RankList | 热门文章
1
太爽了!iPhone 11 包邮送大家!
2
C# WPF MVVM 实战2.1
3
Webpack是怎么工作的
4
简单了解markdown语法
5
asp.net优化方案
6
如何在游标里控制条件_如何正确维护与保养电子柱气动量仪
7
linuxmint20.3 安装anaconda、换源及创建新环境
8
意外的高升:用人格来化解潜在危机
9
朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)
10
Localization in 3D crashes when using Visualization
11
Mybatis拦截器实现数据权限的示例代码
12
[Math] 线性变换 Linear Transfomation
13
IP双栈环境下网络应用迁移
14
本科课程数据结构与算法实验2——单链表与双向循环链表的插入删除操作(C++实现)
15
Delphi 调用惯例 register, pascal, cdecl, stdcall, safecall 介绍
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有