编写按层次顺序(同一层自左至右)遍历二叉树的算法。或:按层次输出二叉树中所有结点;

解:思路:既然要求从上到下,从左到右,则利用队列存放各子树结点的指针是个好办法。
这是一个循环算法,用while语句不断循环,直到队空之后自然退出该函数。
技巧之处:当根结点入队后,会自然使得左、右孩子结点入队,而左孩子出队时又会立即使得它的左右孩子结点入队,……以此产生了按层次输出的效果。
level(liuyuT)
/
liuyu *T,*p,q[100]; 假设max已知/
{int f,r;
f=0; r=0; /置空队/
r=(r+1)%max;
q[r]=T; /根结点进队/
while(f!=r) /队列不空/
{f=(f+1%max);
p=q[f]; /出队/
printf(“%d”,p->data); /打印根结点/
if(p->lchild){r=(r+1)%max; q[r]=p->lchild;} /若左子树不空,则左子树进队/
if(p->rchild){r=(r+1)%max; q[r]=p->rchild;} /若右子树不空,则右子树进队/
}
return(0);
}
法二:
void LayerOrder(Bitree T)//层序遍历二叉树
{
InitQueue(Q); //建立工作队列

EnQueue(Q,T);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
visit§;
if(p->lchild) EnQueue(Q,p->lchild);
if(p->rchild) EnQueue(Q,p->rchild);
}
}//LayerOrder

可以用前面的函数建树,然后调用这个函数来输出。

完整程序如下(已上机通过)
#include <stdio.h>
#include <stdlib.h>
#define max 50
typedef struct liuyu{int data;struct liuyu *lchild,*rchild;}test;
liuyu *root,*p,*q[max];
int sum=0;int m=sizeof(test);

void insert_data(int x) /如何生成二叉排序树?参见教材P43C程序/
{ liuyu *p,*q,s;
s=(test
)malloc(m);
s->data=x;
s->lchild=NULL;
s->rchild=NULL;

if(!root){root=s; return;}
p=root;
while§ /如何接入二叉排序树的适当位置/
{q=p;
if(p->data==x){printf(“data already exist! \n”);return;}
else if(xdata)p=p->lchild; else p=p->rchild;
}
if(xdata)q->lchild=s;
else q->rchild=s;
}

level(liuyuT)
/
liuyu *T,*p,q[100]; 假设max已知/
{int f,r;
f=0; r=0; /置空队/
r=(r+1)%max;
q[r]=T; /根结点进队/
while(f!=r) /队列不空/
{f=(f+1%max);
p=q[f]; /出队/
printf(“%d”,p->data); /打印根结点/
if(p->lchild){r=(r+1)%max; q[r]=p->lchild;} /若左子树不空,则左子树进队/
if(p->rchild){r=(r+1)%max; q[r]=p->rchild;} /若右子树不空,则右子树进队/
}
return(0);
}

void main() /先生成二叉排序树,再调用深度遍历递归函数进行统计并输出/
{int i,x;
i=1;
root=NULL; /千万别忘了赋初值给root!/
do{printf(“please input data%d:”,i);
i++;
scanf(“%d”,&x); /从键盘采集数据,以-9999表示输入结束/
if(x==-9999){
printf(“\nNow output data value:\n”, level(root)); return; }
else insert_data(x);} /调用插入数据元素的函数/
while(x!=-9999);
return;}

  1. 已知一棵具有n个结点的完全二叉树被顺序存储于一维数组A中,试编写一个算法打印出编号为i的结点的双亲和所有的孩子。
    答:首先,由于是完全二叉树,不必担心中途会出现孩子为null的情况。
    其次分析:结点i的左孩子为2i,右孩子为2i+1;直接打印即可。
    Printf(“Left_child=”, %d, v[2i].data; “Right_child=”, %d, v[2i+1].data;);
    但其双亲是i/2,需先判断i为奇数还是偶数。若i为奇数,则应当先i-- ,然后再除以2。
    If(i/2!=0)i–;
    Printf(“Parents=”, %d, v[i/2].data;);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头歌 Linux之线程管理

第1关&#xff1a;创建线程 任务描述 通常我们编写的程序都是单进程&#xff0c;如果在一个进程中没有创建新的线程&#xff0c;则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务&#xff1a;学会使用C语言在Linux系统中使用pthrea…

Leetcode101. 对称二叉树(HOT100)

链接 我的错误代码&#xff1a; class Solution { public:bool isSymmetric(TreeNode* root) {if(!root)return true;if(!root->left&&!root->right)return true;if(!(root->left&&root->right))return false;if(root->left->val!root->…

Java 集合:强大的数据管理工具

在 Java 编程中&#xff0c;集合是一种非常重要的工具&#xff0c;它提供了一种方便的方式来存储和操作一组对象。本文将深入探讨 Java 集合框架&#xff0c;包括其主要类型、特点、用法以及一些最佳实践。 一、引言 在软件开发过程中&#xff0c;我们经常需要处理一组数据。…

qtcanpool 知 09:测试框架

文章目录 前言不满改进优化后语 前言 很久以前&#xff0c;作者写的代码都没有测试用例&#xff0c;最多就是写个 demo 验证一下&#xff0c;毕竟不是专业出身&#xff0c;也没经过大公司的洗礼。 后来&#xff0c;参与到一些项目才知道有专门的测试&#xff0c;而且开发也要测…

网络安全系列 之 SQL注入学习总结

目录 1. sql注入概述2. sql注入测试工具3. sql注入防御方法 3.1 问题来源3.2 防御方法4. SQL注入防御举例 4.1 使用JDBC时&#xff0c;SQL语句进行了拼接 1. 使用statement的executeQuery、execute、executeUpdate等函数时&#xff0c;传入的SQL语句拼接了来自外部的不可信参数…

《平衡之策:C++应对人工智能不平衡训练数据的数据增强方法》

在人工智能的广袤领域中&#xff0c;数据是驱动模型学习与成长的核心燃料。然而&#xff0c;不平衡的训练数据却如同一颗隐藏的暗礁&#xff0c;常常使模型的训练之船偏离正确航道&#xff0c;导致性能不佳与偏差增大。当我们聚焦于 C这一强大的编程语言时&#xff0c;又有哪些…

完整指南:在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK

完整指南&#xff1a;在Ubuntu 20.04 ROS 1环境中配置和使用Orbbec SDK 要在Ubuntu 20.04系统中使用ROS 1环境配置和使用Orbbec SDK&#xff0c;可以遵循以下详细且系统化的步骤。这些步骤将引导您从下载必要的工具和SDK到学习如何使用这些资源&#xff0c;确保您能有效地利用…

使用 Selenium 和 Python 爬取腾讯新闻:从基础到实践

使用 Selenium 和 Python 爬取腾讯新闻&#xff1a;从基础到实践 在这篇博客中&#xff0c;我们将介绍如何利用 Selenium 和 Python 爬取腾讯新闻的内容&#xff0c;并将结果保存到 CSV 文件中。本教程包含以下内容&#xff1a; 项目简介依赖安装实现功能的代码实现中的关键技…

element ui 自定义文件上传二进字流传值问题

1.封装的post请求 import axios from ./axios.js //引入axios文件 export function post (url, data) {return axios({method: post,url,data: {...data}}) }//修改后 正常了 export function post (url, data) {return axios({method: post,url,data: data}) } 2.api文件里面…

【设计模式系列】单例模式(二十)

一、什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的软件设计模式&#xff0c;属于创建型模式。它的目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。 单例模式的主要特点包括&#xff1a; 唯一性&#xff1a…

在 SpringBoot 集成了 Mybatis 的基础上添加 Mybatis-Plus

SpringBoot 集成了 Mybatis 可以参考前一篇文章 《SpringBoot 项目快速集成 Mybatis》 在 SpringBoot 集成了 Mybatis 的基础上添加 Mybatis-Plus 步骤&#xff1a; 引入 mybatis-plus 依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><…

BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。

2024-11-29, 由罗马尼亚布加勒斯特大学创建BioDeepAV数据集&#xff0c;它专门设计来评估最先进的深度伪造检测器在面对未见过的深度伪造生成器时的泛化能力&#xff0c;这对于提高检测器的鲁棒性和适应性具有重要意义。 数据集地址&#xff1a;biodeep 一、研究背景&#xff1…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 &#xff08;一&#xff09;概念差异 &#xff08;二&#xff09;应用场景 二、有状态计算中的状态分类 &#xff08;一&#xff09;托管状态&#xff08;Managed State&#xff09;与原生状态&#xff08;Raw State&#xff09; 两者的…

opencv-android编译遇到的相关问题处理

1、opencv-android sdk下载 下载地址&#xff1a;https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细&#xff0c;大家可安装官方给出的步骤导入。…

前端项目开发 如何解决 error ‘val‘ is not defined no-undef 问题?

在前端开发中&#xff0c;error val is not defined no-undef 是 ESLint 报出的错误&#xff0c;表示在代码中使用了未定义的变量 val&#xff0c;但是 ESLint 没有找到它的声明。为了解决这个问题&#xff0c;通常有以下几种方法&#xff1a; 1. 检查变量是否正确声明 最常见…

深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航

在移动应用开发中&#xff0c;页面的跳转和导航一直是核心功能之一。对于 HarmonyOS 开发者来说&#xff0c;Navigation 组件提供了一个强大的工具来实现灵活的页面管理和导航体验。今天&#xff0c;我们将深入探讨如何使用 HarmonyOS 中的 Navigation 组件来管理页面跳转、工具…

OpenSSH-9.9p1 OpenSSL-3.4.0 升级步骤详细

前言 收到漏洞扫描通知 OpenSSH 安全漏洞(CVE-2023-38408) OpenSSH 安全漏洞(CVE-2023-51385) OpenSSH 安全漏洞(CVE-2023-51384) OpenSSH 安全漏洞(CVE-2023-51767) OpenSSH 安全漏洞(CVE-2023-48795) OpenSSH&#xff08;OpenBSD SecureShell&#xff09;是加拿大OpenBSD计划…

Python毕业设计选题:基于Flask的医疗预约与诊断系统

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 疾病信息 就诊信息 个人中心 管理员登录界面 管理员功能界面 用户界面 医生…

经济:趋势判断 课程学习笔记

文章目录 导言意愿支付和需求函数影响需求的因素市场均衡及应用均衡变动分析 导言 当代经济学研究的权威机构&#xff1a;美国经济学会&#xff08;AEA&#xff09;。 经济学研究的问题有哪些&#xff1a; 为什么有一些国家富裕&#xff0c;而另外一些国家贫穷&#xff1f;是…