当前位置: 首页 > news >正文

数据结构 ——— 链式二叉树的销毁(释放)

目录

链式二叉树示意图

手搓一个链式二叉树

代码实现 


示意图


手搓一个链式二叉树

代码演示:

// 数据类型
typedef int BTDataType;// 二叉树节点的结构
typedef struct BinaryTreeNode
{BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向左子树的指针struct BinaryTreeNode* right; //指向右子树的指针
}BTNode;// 申请新节点
BTNode* BuyNode(BTDataType x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));// 判断是否申请成功if (newnode == NULL){perror("malloc fail");return NULL;}// 初始化newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}BTNode* CreatBinaryTree()
{BTNode* n1 = BuyNode(1);assert(n1);BTNode* n2 = BuyNode(2);assert(n2);BTNode* n3 = BuyNode(3);assert(n3);BTNode* n4 = BuyNode(4);assert(n4);BTNode* n5 = BuyNode(5);assert(n5);BTNode* n6 = BuyNode(6);assert(n6);n1->left = n2;n1->right = n4;n2->left = n3;n4->left = n5;n4->right = n6;return n1;
}

代码实现

代码演示:

void BTreeDestory(BTNode* root)
{if (root == NULL)return;BTreeDestory(root->left);BTreeDestory(root->right);free(root);
}

代码解析:

释放链式二叉树的本质是后序遍历
先利用递归找到叶子节点,释放叶子节点,再层层往回返,依次释放即可

代码演示:

释放前:

释放后: 

释放后,需要手动将 root 置空

代码如下:

BTNode* root = CreatBinaryTree1();// 释放二叉树
BTreeDestory(root);
root = NULL;

相关文章:

数据结构 ——— 链式二叉树的销毁(释放)

目录 链式二叉树示意图 手搓一个链式二叉树 代码实现 示意图 手搓一个链式二叉树 代码演示: // 数据类型 typedef int BTDataType;// 二叉树节点的结构 typedef struct BinaryTreeNode {BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向…...

log4j异常堆栈文件输出

目的:log4j异常堆栈关联到traceId一句话中,方便搜索 1、获取堆栈后一起打印 private void logException(Throwable t, ProceedingJoinPoint joinPoint) {if (this.printErrorStackSys) {StringWriter sw new StringWriter();PrintWriter pw new Print…...

在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

最近,我在 Windows 系统上安装和配置 Apache Maven 时遇到了一些问题,想在此记录下我的解决历程,希望对遇到类似问题的朋友有所帮助。 问题描述 我下载了 Maven 并按照常规步骤配置了相关的环境变量。然而,在 PowerShell 中输入…...

SpringSecurity源码中核心类

SpringSecurity源码 第一部分 核心类 SecurityBuilderHttpSecurityWebSecuritySecurityFilterChainFilterChainProxy SecurityBuilder是安全构架器,HttpSecurity和WebSecurity都是SecurityBuilder的实现类,HttpSecurity通过build()构建了一个Security…...

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目...

猿创征文|Inscode桌面IDE:打造高效开发新体验

猿创征文|Inscode桌面IDE:打造高效开发新体验 引言 在当今快速发展的软件开发领域,一个高效、易用的集成开发环境(IDE)是每个开发者必不可少的工具。Inscode 桌面 IDE 作为一款新兴的开发工具,凭借其强大…...

概率论中的PMF、PDF和CDF

在概率论中,PMF(概率质量函数)、PDF(概率密度函数)和CDF(累积分布函数)是描述随机变量分布的三个重要概念。它们分别用于不同类型的随机变量,并帮助我们理解随机事件的概率特性。本文…...

Vue 简单入手

前端工程化(Front-end Engineering)指的是在前端开发中,通过一系列工具、流程和规范的整合,以提高开发效率、代码质量和可维护性的一种技术和实践方法。其核心目的是使得前端开发变得更高效、可扩展和可维护。 文章目录 一、Vue 项…...

Github配置ssh key原理及操作步骤

文章目录 配置SSH第一步:检查本地主机是否已经存在ssh key第二步:生成ssh key第三步:获取ssh key公钥内容第四步:Github账号上添加公钥第五步:验证是否设置成功验证原理 往github上push项目的时候,如果走ht…...

大循环引起CPU负载过高

一、问题背景 环境:jdk1.8 tomcat7 在一次发布时,cpu出现负载过高,其负载突破200%,并且响应时间也大幅度超时。 二、问题分析 【1】发布前做过压测,并没有发现cpu异常升高的现象,所以其可能与生产环境的请…...

[Java]微服务治理

注册中心原理 注册中心可以统一管理项目中的所有服务 服务治理中的三个角色分别是什么? 服务提供者: 暴露服务接口,供其它服务调用服务消费者: 调用其它服务提供的接口注册中心: 记录并监控微服务各实例状态,推送服务变更信息 消费者如何知道提供者的…...

深入解析C语言中的extern关键字:语法、工作原理与高级应用技巧

引言 在C语言中,extern 关键字是一个强大的工具,用于声明外部变量和函数,使得这些变量和函数可以在多个源文件之间共享。理解 extern 的工作原理和最佳实践对于编写模块化、可维护的代码至关重要。本文将深入探讨 extern 关键字的各个方面&a…...

元器件封装

元器件封装类型 为什么越来越多用贴片元件,而不是插件元件 为什么越来越多用贴片元件,而不是插件元件 1.体积小、质量小、容易保存和运输; 2.容易焊接和拆卸。抗震效果好。 贴片元件不用过孔,用锡少。直插元件最麻烦的就是拆卸&a…...

状态空间方程离散化(Matlab符号函数)卡尔曼

// 卡尔曼滤波(4):扩展卡尔曼滤波 - 知乎 // // matlab 连续系统状态空间表达式的离散化&状态转移矩阵求解_matlab状态方程离散化-CSDN博客 // // // %https://blog.csdn.net/weixin_44051006/article/details/107007916 clear all; clc; syms R1 R2 C1 C…...

软件设计师-计算机网络

OSI网络模型 物理层,提供原始物理通路。数据交换的单位是二进制,bit,比特流,设备有中继器,集线器数据连输层,把原始不可靠的物理层链接变成无差错的数据通道,并解决多用户竞争问题。传送单位是帧&#xff…...

SpringBoot操作Elasticsearch

SpringBoot操作Elasticsearch SpringData框架简化Java代码连接ES的过程 官网&#xff1a;https://spring.io/projects/spring-data/ 以上列表中都是Spring Data支持连接的数据源 添加依赖 已经添加过了 <!--添加SpringDataES的依赖--><dependency><groupId&…...

阿里云aliyun gradle安装包下载地址

阿里云 查找你要下载的安装包 macports-distfiles-gradle安装包下载_开源镜像站-阿里云 https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.9-bin.zip 腾讯 https://mirrors.cloud.tencent.com/gradle/ https://mirrors.cloud.tencent.com/gradle/ https…...

【设计模式】创建型设计模式-工厂模式的实现

工厂模式实现 定义例子UML类图理解Java代码实现总结 定义 工厂方法模式定义了一个接口用于创建对象&#xff0c;该模式由子类决定实例化哪个工厂类。该模式把类的实例化推迟到了子类。 例子 通过一个公共的类方法来管理画图对象的创建。 UML类图理解 Java代码实现 定义接口…...

【分布式】CAP理论

CAP定理的核心要点&#xff1a; CAP定理指出&#xff0c;任何一个分布式系统在面对网络分区&#xff08;Partition&#xff09;的情况下&#xff0c;最多只能同时满足以下三个特性中的两个&#xff1a; 一致性&#xff08;Consistency&#xff09;&#xff1a; 所有节点在同一…...

市域社会治理现代化解决方案-2

1. 社会治理现代化背景 市域社会治理现代化旨在通过制度化、科学化、规范化、程序化和精细化的治理体系,实现社会治理能力的提升。该方案强调市一级的统筹协调和资源技术优势,以有效应对新型社会矛盾和风险挑战。 2. 社会治理面临的问题 当前社会治理在实践中存在诸多问题…...

虚拟化与加密环境下勒索软件检测的IO模式识别与模型泛化实践

1. 项目概述&#xff1a;当勒索软件检测遇上虚拟化与加密在存储安全领域&#xff0c;勒索软件检测一直是个“猫鼠游戏”。传统的检测方法&#xff0c;尤其是那些依赖文件熵值&#xff08;Entropy&#xff09;突变的方案&#xff0c;在过去几年里确实立下了汗马功劳。其原理很直…...

告别重装!用Systemback在Ubuntu 20.04上打造你的专属系统‘时光机’

用Systemback为Ubuntu打造专属系统时光机每次系统崩溃都要重装&#xff1f;开发环境配置浪费半天时间&#xff1f;实验室电脑和个人笔记本环境不一致&#xff1f;这些问题对于频繁折腾系统的开发者来说简直是噩梦。Systemback就像给Ubuntu系统装上了"时光机"&#xf…...

SSH连接报kex_exchange_identification的4步根因定位法

1. 这个报错不是SSH客户端的问题&#xff0c;而是服务器在“拒之门外” “kex_exchange_identification”——这串字符第一次出现在终端里时&#xff0c;我正帮一位刚转行做运维的同事排查一台新部署的Ubuntu云服务器。他反复执行 ssh userip &#xff0c;每次都在输入密码前…...

基于IoT与MPC的老旧建筑HVAC智能节能系统实践

1. 项目概述&#xff1a;当老建筑遇上新智慧在建筑能耗这个老生常谈的话题里&#xff0c;既有建筑&#xff0c;尤其是那些上了年纪、缺乏智能系统的老楼&#xff0c;往往是被遗忘的角落。大家的目光总聚焦在那些配备了先进楼宇自控系统的新建“智能建筑”上&#xff0c;但现实是…...

Debian挂载NFS远程硬盘踩坑实录:权限拒绝、连接超时问题一站式解决

Debian挂载NFS远程硬盘踩坑实录&#xff1a;权限拒绝、连接超时问题一站式解决在Linux环境下使用NFS&#xff08;Network File System&#xff09;挂载远程存储是常见的跨服务器文件共享方案&#xff0c;但实际操作中常会遇到各种"拦路虎"。本文将以Debian系统为例&a…...

告别调参噩梦!用Ball k-means在Python里5分钟搞定百万级数据聚类

百万级数据聚类的革命&#xff1a;用Ball k-means实现Python高效实战 当你的数据集膨胀到百万级别时&#xff0c;传统k-means算法突然变得像老牛拉车——迭代缓慢、调参困难、内存告急。我曾在一个电商用户分群项目中&#xff0c;面对120万条用户行为数据&#xff0c;sklearn的…...

从/dev/snd文件看起:手把手教你理解Linux ALSA声卡驱动的设备命名规则

从/dev/snd文件看起&#xff1a;手把手教你理解Linux ALSA声卡驱动的设备命名规则当你第一次打开/dev/snd目录&#xff0c;看到诸如controlC0、pcmC0D0p这样神秘的文件名时&#xff0c;是否感到困惑&#xff1f;这些看似随意的字符串背后&#xff0c;其实隐藏着ALSA驱动对音频硬…...

Ubuntu 22.04双网卡配置踩坑记:netplan apply报错‘默认路由冲突’的三种解法

Ubuntu 22.04双网卡路由冲突实战指南&#xff1a;从紧急修复到高阶策略当你为Ubuntu服务器配置双网卡时&#xff0c;netplan apply命令突然抛出"Conflicting default route declarations for IPv4"错误&#xff0c;这种场景对运维工程师来说再熟悉不过。本文将带你深…...

昇腾CANN cmake:CANN 项目的 CMake 构建模块实战

从 ops-nn 到 cann-recipes-*&#xff0c;几乎所有 CANN 开源仓库都用 CMake 做构建系统。cann-cmake 仓库提供一套标准的 CMake 模块——FindCANN.cmake&#xff08;找到 CANN 安装路径&#xff09;、AscendCCore.cmake&#xff08;Ascend C 编译规则&#xff09;、AscendKern…...

深度强化学习与控制2026 课程总结Week2

深度Q网络——DQN算法流程&#xff1a; (1) 初始化网络参数 (2) 初始化网络参数 (3) 初始化经验回放池R (4) 进入循环迭代训练&#xff1a;for 序列 do获取初始状态for 时间步 do 根据以贪婪策略选择动作&#xff0c;获得,存入经验回放池R若R中数据充足&#xff0c;从R中采样…...