【二叉树】构建销毁二叉树

目录

创建二叉树

整体思路

代码实现

图示理解​

销毁二叉树

判断二叉树是否是完全二叉树&层序 

整体思路

代码实现

图是理解 

二叉树的性质  

题目


创建二叉树

整体思路

  • 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
  • 遇到#就回退,返回NULL,链接到上层递推的左边/右边
  • 开辟节点,按照前序(根左右)的顺序。放入元素到开辟的空间。
  • 递退下去的是左节点就链接到左边
  • 递退下去的是右节点就链接到右边
  • return root 返回节点链接到上层的左边/右边

代码实现

//创建二叉树
BTNode* BinaryTreeCreate(BTDataType* a, int* pi)
{if (a[*pi] == '#'){(*pi)++;return NULL;}BTNode* root = (BTNode*)malloc(sizeof(BTNode*));root->data = a[(*pi)++];root->left = BinaryTreeCreat(a, pi);root->right = BinaryTreeCreate(a, pi);return root;
}

图示理解

销毁二叉树

  • 销毁二叉树前序/中序/后序都可以
  • 后序最方便,不需要先保存左右孩子
  • 形式参数是实际参数的一份临时拷贝。(置空有两种方法)
  • 方法1:指针的指针
  • 方法2:在main函数里面销毁 
  • ❗一定要销毁
  1. 函数return之前
  2. 使用了动态内存开辟的地方都要销毁
//销毁二叉树
void BinaryTreeDestory(BTNode** root)
{if (*root == NULL)return;BinaryTreeDestory(*((*root)->left));//❌BinaryTreeDestory(*((*root)->right));free(*root);*root = NULL;
}
//销毁二叉树
#include<stdio.h>
void BinaryTreeDestory(BTNode* root)
{if (root == NULL)return;BinaryTreeDestory(root->left);BinaryTreeDestory(root->right);free(root);
}
int main()
{BTNode* root = CreatBinaryTree();BinaryTreeDestory(root);root=NULL;return 0;
}

判断二叉树是否是完全二叉树&层序 

整体思路

  • 完全二叉树一层一层(层序遍历)走,就是连续的
  • 只要不连续就不是完全二叉树
  • 层序遍历(全部元素都入队列❗空也入队列)
  • 遇到空了就跳出循环
  • 进入另外一个循环
  • 查看从空开始后面的元素是否都是NULL
  • 若全是NULL则证明是完全二叉树
  • 若还有元素则证明不是完全二叉树
  • 注意❗return之前记得要销毁

代码实现

//判断完全二叉树
int BinaryTreeComplete(BTNode* root)
{Queue pq;QueueInit(&pq);if (root)QueuePush(&pq, root);while (!QueueEmpty(&pq)){BTNode* tmp = QueueFront(&pq);//队列头的元素QueuePop(&pq);//出元素到队头if (tmp == NULL){break;}QueuePush(&pq, tmp->left);QueuePush(&pq, tmp->right);}while (!QueueEmpty(&pq))//队列里面的元素个数){if (QueueFront(&pq)){QueueDestroy(&pq);return false;}QueuePop(&pq);//出元素到队头}QueueDestroy(&pq);return true;
}

图是理解 

二叉树的性质  

  • 对任何一棵二叉树,如果度为0其叶结点个数为n0, 度为2的分支结点个数为n2 ,则有n0=n2+1
  • 其他结论前面都已论证过了
  • 一棵树节点个数=度为0(叶子节点)+度为1+度为2

 

题目

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为
A 不存在这样的二叉树
B 200
C 198
D 199
2.下列数据结构中,不适合采用顺序存储结构的是
A 非完全二叉树
B 堆
C 队列
D 栈
3.在具有 2n 个结点的完全二叉树中,叶子结点个数为
A n
B n+1
C n-1
D n/2
4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为
A 11
B 10
C 8
D 12
5.一个具有767个节点的完全二叉树,其叶子节点个数为
A 383
B 384
C 385
D 386
答案:BAABB

【第三题】

 大家可以自己尝试写第五题??

达克效应。最近这个多度递归,大概已经到了我的自信奔溃区了。

🙂感谢大家的阅读,若有错误和不足,本章初阶学习二叉树就结束了,下篇进入排序。欢迎指正。大家新年快乐!! 

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

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

相关文章

浅谈路由器交换结构

一、路由器技术概述 路由器&#xff08;Router&#xff09;是连接两个或多个网络的硬件设备&#xff0c;在网络间起网关的作用&#xff0c;是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议&#xff0c;例如某个局域网使用的以太网协议…

文章页的上下篇功能是否有必要?boke112百科取消上下篇功能

也不知道是从什么时候开始&#xff0c;我们很多站长的博客网站文章页都会在文末添加上“上一篇”和“下一篇”功能&#xff0c;目的是进行站内SEO优化和方便用户阅读上下篇文章。 boke112百科不管是以前使用的Three主题还是现在使用的YIA主题&#xff0c;刚开始的文章页都是有…

git安装及使用

1、下载git 官网 Windows系统Git安装教程&#xff08;详解Git安装过程&#xff09; 官网打不开的话&#xff0c;可以使用镜像地址 镜像地址 2、使用git Git的下载、安装与使用(Windows) 30分钟带你精通git使用 3、注册github https://github.com/ 4、github文档 h…

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

腾讯云4核8G服务器可以用来干嘛?怎么收费?

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…

sheng的学习笔记-docker部署springboot

部署文章目录&#xff1a;目录 docker部署&#xff0c;原理&#xff0c;命令&#xff0c;可以参考&#xff1a;docker原理图&#xff0c;部署&#xff0c;命令 目录 将springboot部署到docker中 遇到过的问题&#xff1a; pom配置 操作步骤 生成jar 构建镜像 查看镜像d…

CTFshow-WEB入门-信息搜集

web1&#xff08;查看注释1&#xff09; wp 右键查看源代码即可找到flag web2&#xff08;查看注释2&#xff09; wp 【CtrlU】快捷键查看源代码即可找到flag web3&#xff08;抓包与重发包&#xff09; wp 抓包后重新发包&#xff0c;在响应包中找到flag web4&#xff08;robo…

物联网和工业4.0

在当今这个快速发展的技术时代&#xff0c;物联网&#xff08;IoT&#xff09;和工业4.0成为了推动全球进入新工业时代的两大驱动力。对于刚入行的人来说&#xff0c;深入理解这两个概念及其背后的技术原理&#xff0c;对于把握未来的职业机会至关重要。 物联网&#xff0c;简…

Android入门第66天-在不同的开发电脑上如何保持打出的APK签名一致的解决方法

适用场景 我们假设在公司有一台MAC笔记本,在家有一个PC DESKTOP。经常开发用的是MAC,偶尔周未碰到修一个BUG要发布。在前期我们假设还没有jenkins cicd环境或者说有时需要在自己手头的电脑临时来发布一下APK时经常会碰到打完了一个APK,然后我们把APK挂到网上让连接的手机端…

MongoDB聚合:$unset

使用$unset阶段可移除文档中的某些字段。从版本4.2开始支持。 语法 移除单个字段&#xff0c;可以直接指定要移除的字段名&#xff1a; { $unset: "<field>" }移除多个字段&#xff0c;可以指定一个要移除字段名的数组&#xff1a; { $unset: [ "<…

Linux 禁用/启用 交换分区

1. 关闭 Linux 的 swap 分区 swapoff -a sed -ri /\sswap\s/s/^#?/#/ /etc/fstab验证: 如果 swapon -s 没有输出结果, 则说明已经关闭了. 2. 开启 Linux 的 swap 分区 2.1 如果原来有 swap, 后来关闭了 # 去掉 /etc/fstab 中 swap 的注释 swapon /dev/fstab_中的目录2.2 …

关于java的多线程初识

关于java的多线程初识 我们从今天开始&#xff0c;正式学习java的多线程&#xff0c;我们在前面的文章中学习到了java的基础&#xff0c; 但是距离我们工作实战还差的很远&#xff0c;我们学习好了基础&#xff0c;以后的文章会逐步的深入&#xff0c;去讲解各种前端框架&…

Flink从入门到实践(三):数据实时采集 - Flink MySQL CDC

文章目录 系列文章索引一、概述1、版本匹配2、导包 二、编码实现1、基本使用2、更多配置3、自定义序列化器4、Flink SQL方式 三、踩坑1、The MySQL server has a timezone offset (0 seconds ahead of UTC) which does not match the configured timezone Asia/Shanghai. 参考资…

【python】网络爬虫与信息提取--requests库

导学 当一个软件想获得数据&#xff0c;那么我们只有把网站当成api就可以 requests库:自动爬取HTML页面&#xff0c;自动网络请求提交 robots协议&#xff1a;网络爬虫排除标准&#xff08;网络爬虫的规则&#xff09; beautiful soup库&#xff1a;解析HTML页面 工具&…

算法---回溯(正文)

1.什么是回溯&#xff1f; 回溯算法的定义就是和暴力枚举一样枚举所有可能并加撤回&#xff0c;也能和暴力一样去掉一些重复&#xff08;在之前就被筛出&#xff0c;但还要枚举这个&#xff0c;我们可以跳过这个了---------这个就是回溯剪枝&#xff09;。但为什么回溯不是暴力…

【精选】java多态进阶——多态练习测试

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Spring 开发 pom.xml 配置文件(通用配置)

因为在打 jar 包时总会出现各种各样莫名其妙的问题&#xff0c;所以本篇博客提供了含有 Java8.0 &#xff0c;mybatis&#xff0c;mysql&#xff0c;lombok 以及打 jar 包的完整 pom.xml 配置文件&#xff0c;直接复制使用即可 <project xmlns"http://maven.apache.or…

环境对人类智能、人工智能的影响

环境是指人类和人工智能所处的物理、社会和文化背景。环境在很大程度上影响着人类和人工智能的发展和表现&#xff0c;具体包括以下几个方面&#xff1a; 环境对于人类和人工智能的学习和认知具有重要影响。不同的环境提供了不同的学习和认知机会&#xff0c;可以帮助人类和人工…

Chapter 8 - 10. Congestion Management in TCP Storage Networks

Comparison with Lossless Networks As Chapter 2 explains, Fibre Channel defines a maximum frame size of 2148 bytes. Users do not have to change the MTU value, and hence, it is never a consideration. 如第 2 章所述,光纤通道定义的最大帧大小为 2148 字节。用户…

Mac上新版InfluxDB使用教程

一、简介 官网&#xff1a;influxdb 二、influxdb安装 建议使用Homebrew在 macOS 上安装 InfluxDB v2&#xff1a; brew install influxdb启动influxdb服务&#xff1a;brew services start influxdb 停止influxdb服务&#xff1a;brew services stop influxdb 查看是否启…