二叉树(6)——二叉树的创建和销毁

1 二叉树的创建

整体思路

  • 将数组里的元素一直分为根,左子树,右子树,遇到#就返回NULL,链接到上层递归的左子树或者右子树,一定要把一个节点的左子树全部递归完才能返回到右子树。
  • 这种方法也可以scanf一个数组里的元素,然后构建出一个二叉树。

代码实现 

TreeNode* TreeCreate(char* a, int* pi)
{if (a[*pi] == '#'){(*pi)++;return NULL;}TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));if (root == NULL){perror("malloc fail");exit(-1);}root->data = a[(*pi)++];root->left = TreeCreat(a, pi);root->right = TreeCreate(a, pi);return root;
}

递归展开图

2 二叉树的销毁

  • 销毁二叉树使用前序、中序或者后序都可以
  • 后序最方便,前序中序都需要先保存左右孩子再销毁,后序都遍历完了再一个一个销毁,很方便。

代码实现 

方法1:二级指针

//销毁二叉树
void DestoryTree(TreeNode** root)
{if (*root == NULL)return;DestoryTree(*((*root)->left));DestoryTree(*((*root)->right));free(*root);*root = NULL;
}

方法2:在main函数里面手动销毁

  • void DestoryTree(TreeNode* root)
    {if (root == NULL)return;DestoryTree(root->left);DestoryTree(root->right);free(root);
    }int main()
    {TreeNode* root = CreateTree();DestoryTree(root);root = NULL;return 0;
    }

3 判断二叉树是否是完全二叉树

整体思路

  • 只要不连续,就不是完全二叉树。
  • 层序遍历(全部元素都入队列,空也入队列)
  • 遇到空了就跳出循环

进入另外一个循环

  • 查看从空开始后面的元素是否都是NULL
  • 若全是NULL则证明是完全二叉树
  • 若还有非空元素则证明不是完全二叉树

注意:当第一个空pop的时候,所有的元素都已经进队列了。(可以画图理解)

代码实现

// 判断二叉树是否是完全二叉树
bool TreeComplete(TreeNode* root)
{Queue q;QueueInit(&q);if (root)QueuePush(&q, root);int levelSize = 1;while (!QueueEmpty(&q)){TreeNode* front = QueueFront(&q);QueuePop(&q);if (front == NULL)break;QueuePush(&q, front->left);QueuePush(&q, front->right);}// 前面遇到空以后,后面还有非空就不是完全二叉树while (!QueueEmpty(&q)){TreeNode* front = QueueFront(&q);QueuePop(&q);if (front){QueueDestroy(&q);return false;}}QueueDestroy(&q);return true;
}

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

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

相关文章

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设…

Mysql全局级别修改SQL模式的详细教程

文章目录 1. 问题描述2. 开发环境3. 解决方法(详细步骤) 1. 问题描述 Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column btc-cloud.t1.id which is not functiona…

socket与rpc的区别

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量&…

Docker Compose映射卷的作用是什么,dockerfile这个文件有什么区别和联系?

Docker Compose中映射卷(Volumes)的作用和Dockerfile之间既有区别也有联系。下面详细解释两者的作用、区别和联系: Docker Compose映射卷的作用 在Docker Compose中,卷(Volumes)用于数据持久化和数据共享…

【实战 JS逆向+python模拟获取+Redis token会话更新】实战模拟测试 某巴批发网 仅供学习

逆向日期:2024.02.20 使用工具:Node.js、python、Redis 加密方法:md5标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标…

day07-实战-今日指数

今日指数-day07 1.股票Code联想推荐 1.1 股票Code联想推荐功能介绍 1) 原型效果 输入框输入股票编码后,显示关联的股票信息; 2)接口定义说明 接口说明: 功能描述:根据输入的个股代码,进行模糊查询,返…

Python学习-流程图、分支与循环(branch and loop)

十、流程图 1、流程图(Flowchart) 流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来。 好处: 1)代码的指导文档 2)有助…

【Python】OpenCV-实时眼睛疲劳检测与提醒

实时眼睛疲劳检测与提醒 1. 引言 眼睛疲劳对于长时间使用电子设备的人群来说是一个常见的问题。为了帮助用户及时发现眼睛疲劳并采取相应的措施,本文介绍了一个实时眼睛疲劳检测与提醒系统的简单实现。使用了OpenCV、MediaPipe以及Playsound库,通过摄像…

云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

docker (十一)-进阶篇-docker-compos最佳实践部署zabbix

一 部署docker环境 关闭防火墙、selinux、开启docker,并设置开机自启动 注意点:docker部署的时候,bip要指定,不然会导致虚拟机ip和容器ip冲突,ssh连不上虚拟机 部署请参考 docker (二)-yum…

OpenHarmony下GN语法普法

OpenHarmony下GN语法普法 引言 前面一直在折腾怎么移植,怎么编写,尼玛忘了搞最基本的GN语法了。这不必须给安排上! 一.GN表达式语言和GN作用域 GN 是简单的动态类型的命令式语言,其最终目的只是产生声明性的 Ninja 规则。一切都…

【python】windowslinux系统python的安装

一、python官网及下载路径 官网地址:Welcome to Python.org 下载路径:Download Python | Python.org ​​​​​​​ linux源码安装包下载: windows二进制安装包下载: 二、Linux如何安装python 2.1 单版本安装 以安装python…

Codeforces Beta Round 15 C. Industrial Nim Nim,1~n的异或和

Problem - 15C - Codeforces 目录 Nim游戏: 1~n的异或和: 代码: Nim游戏: n个石头堆,谁最后没得取谁败 我用的异或思考法,对所有堆异或。开局异或和为0的败 最后全是0,异或完也是0. //最…

芋道----如何在自己的业务模块中添加导入导出功能

导出不再多做介绍&#xff0c;代码自动生成就会有&#xff0c;这里介绍一下如何实现导入&#xff1a; 一、首先介绍前台&#xff1a; 1&#xff09;页面上添加导入按钮 <el-buttontype"primary"plainicon"el-icon-download"size"mini"click…

DDI中的自适应子结构

SA-DDI提出了一种子结构感知图神经网络&#xff0c;一种配备了子结构注意力机制和用于DDI预测的子结构-子结构交互模块&#xff08;SSIM&#xff09;的消息传递神经网络。具体而言&#xff0c;基于分子中官能团的尺寸和形状通常是不规则的化学直觉&#xff0c;子结构注意力被设…

线阵相机之帧超时

1 帧超时的效果 在帧超时时间内相机若未采集完一张图像所需的行数&#xff0c;则相机会直接完成这张图像的采集&#xff0c;并自动将缺失行数补黑出图&#xff0c;机制有以下几种选择&#xff1a; 1. 丢弃整张补黑的图像 2. 保留补黑部分出图 3.丢弃补黑部分出图

USACO 2024年2月铜组 PALINDROME GAME(博弈)

第一题&#xff1a;PALINDROME GAME 标签&#xff1a;思维、博弈 题意&#xff1a;给定一堆石子&#xff0c;有 S S S个&#xff08; 1 ≤ S ≤ 1 0 1 0 15 1≤S≤10^{10^{15}} 1≤S≤101015&#xff09;&#xff0c; B e s s i e Bessie Bessie和 E l s i e Elsie Elsie轮流…

混子文章|蓝桥杯一题 -平方差

题目考点: 平方差 ,平方差奇偶关系 代码 #include<bits/stdc.h> #define Run 0 #define endl "\n" #define N 100005 using unl __int128_t; using ll long long; using namespace std; class Solution { public: void slove() {int sum 0;int L, R; cin &…

内存计算研究进展-针对机器学习的近数据计算架构

针对机器学习的近数据计算架构代表性工作有&#xff1a; Georgia Institute of Technology的BSSync (bounded staled sync) 和 Neurocube&#xff0c;Advanced Micro Devices 的 CoML&#xff0c;具体如下。 1 BSSync BSSync指出&#xff0c;在并行实现的机器学习应用中&#…

马斯洛激励理论

马斯洛激励理论——摘抄 马斯洛理论&#xff0c;也被称为马斯洛需求层次理论&#xff0c;是由美国心理学家亚伯拉罕马斯洛在1943年提出的。它是一种心理学中的激励理论&#xff0c;描绘了人类需求的五级模型&#xff0c;通常被描绘成金字塔内的等级。 从层次结构的底部向上&am…