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

初阶数据结构之二叉树

那么本篇文是初阶数据结构这个系列的最后一篇文章,那么闲话少叙,我们直接进入正题

在讲二叉树的一些之前知识点之前,我先给大家送个小礼物哈

手搓二叉树

typedef int BTDataType ;
typedef struct BinaryTreeNode
{
BTDataType _data ;
struct BinaryTreeNode * _left ;
struct BinaryTreeNode * _right ;
} BTNode ;
BTNode * CreatBinaryTree ()
{
BTNode * node1 = BuyNode ( 1 );
BTNode * node2 = BuyNode ( 2 );
BTNode * node3 = BuyNode ( 3 );
BTNode * node4 = BuyNode ( 4 );
BTNode * node5 = BuyNode ( 5 );
BTNode * node6 = BuyNode ( 6 );
node1 -> _left = node2 ;
node1 -> _right = node4 ;
node2 -> _left = node3 ;
node4 -> _left = node5 ;
node4 -> _right = node6 ;
return node1 ;
}

手搓二叉树的思路

首先创建一个结构体,且结构体里的元素也是需要自己设置,就拿链表来举例,结构体内必须包含数据以及指向下一个节点的指针next,那么返回到二叉树这里,结构体需要包含的就是数据,以及左右指针,然后创建子节点以及子节点之间相互连接

前序遍历

那么我们可以先从这个图中得到一个结论

前序遍历:根  左子树   右子树

这里我也是给大家准备了一个小视频,大家可以参考一下

二叉树前序遍历思路讲解

源代码

void FrontOrder(TFT* node)
{
    if (node == NULL)
    {
        printf("N ");
        return;
    }
    printf("%d ", node->data);
    FrontOrder(node->left);
    FrontOrder(node->right);
}

中序遍历

我们先来说一下结论

中序遍历:左子树    根     右子树

这里的操作我也给大家准备了 一个小视频,大家可以参考一下

二叉树中序遍历思路讲解

源代码

void MiddleOrder(TFT* node)
{
    if (node == NULL)
    {
        printf("N ");
        return;
    }
    MiddleOrder(node->left);
    printf("%d ", node->data);
    MiddleOrder(node->right);
}

后序遍历

还是一样,我们先讲结论

后序遍历:左子树   右子树   根

这里的操作我也给大家准备了 一个小视频,大家可以参考一下

二叉树的后序遍历

源代码

void BehindOrder(TFT* node)
{
    if (node == NULL)
    {
        printf("N ");
        return;
    }
    BehindOrder(node->left);
    BehindOrder(node->right);
    printf("%d ", node->data);
}

前中后序的共同特点

通过递归的方法,进行遍历

节点计数

思路:当节点不为空时,计数器+1,节点为空时,计数器+0,然后用递归进行遍历

源代码

int TreeSize(TFT* root)
{
    /*int size = 0;*/
    if (root == NULL)
        return 0;
    else
        ++size;

    TreeSize(root->left);
    TreeSize(root->right);
    return size;
}

计算树的高度

思路:进入函数后先判空,如果为空,则返回0,不为空时,先记录当前左右两科树的高点,然后进行左右判断,谁大谁加1

源代码

int TreeHighSize(TFT* node)
{
    if (node == NULL)
        return 0;
    int left = TreeHighSize(node->left);
    int right = TreeHighSize(node->right);
    return left > right ? left + 1 : right + 1;
}

树的销毁

树的销毁其实不难,基本上就是还原变量指针等等

源代码

void DestroyTree(TFT* node)
{
    if (node == NULL)
        return;
    DestroyTree(node->left);
    DestroyTree(node->right);
    free(node);
}

那么初阶数据结构系列的文章就先给大家更新到这里,如果喜欢我的文章,还请各位观众老爷们留个赞谢谢,我们下期再见

相关文章:

初阶数据结构之二叉树

那么本篇文是初阶数据结构这个系列的最后一篇文章,那么闲话少叙,我们直接进入正题 在讲二叉树的一些之前知识点之前,我先给大家送个小礼物哈 手搓二叉树 typedef int BTDataType ; typedef struct BinaryTreeNode { BTDataType _data …...

代码随想三刷动态规划篇8

代码随想三刷动态规划篇8 122. 买卖股票的最佳时机 II题目代码 123. 买卖股票的最佳时机 III题目代码 188. 买卖股票的最佳时机 IV题目代码 309. 买卖股票的最佳时机含冷冻期题目代码 122. 买卖股票的最佳时机 II 题目 链接 代码 class Solution {public int maxProfit(int…...

​​服务拆分的原则

目录 一、单一职责原则 二、服务自治原则 三、单向依赖 一、单一职责原则 单⼀职责原则原本是面向对象设计中的⼀个基本原则, 它指的是⼀个类应该专注于单⼀功能. 不要存在多于⼀个导致类变更的原因 在微服务架构中, ⼀个微服务也应该只负责⼀个功能或业务领域, 每个服务应该…...

离线安装docker社区版

提示:以下所有命令都在Ubuntu-24.04-live-server-amd64系统中运行 文章目录 前言一、离线包制作二、在目标系统上离线安装Docker CE总结 前言 安全原因,内部机器不能联网,要给新机器安装 docker-ce 只能使用离线安装方法。如果使用本文的下载…...

徒手绘制 Android 通用进度条

拖动条&#xff08;FlexSeekBar&#xff09;&#xff0c;在Android的各个地方都非常常用&#xff0c;本文旨在自研一套通用的进度条&#xff0c;非常适合车载App使用 样式如下&#xff1a; 使用示例 <!--默认用法--> <com.max.android.ui.seekbar.FlexSeekBarandroi…...

【TB作品】矩阵键盘电话拨号,ATMEGA16单片机,Proteus仿真 atmega16矩阵键盘电话拨号

atmega16矩阵键盘电话拨号 c代码和仿真图&#xff1a; 使用ATmega16实现矩阵键盘电话拨号功能 项目背景 在电子设计和嵌入式系统开发中&#xff0c;矩阵键盘是常见的人机交互方式。它可以实现较多按键的输入&#xff0c;同时节省单片机的I/O资源。结合LCD显示和蜂鸣器&am…...

JavaScript(6)——数据类型转换

为什么需要类型转换&#xff1f; JavaScript是弱数据类型&#xff1a;JavaScript不知道变量到底属于哪种数据类型&#xff0c;只有赋值了才清除 使用表单&#xff0c;prompt获取的数据默认为字符串类型&#xff0c;此时不能直接进行算数运算 隐式转换 某些运算符被执行时&am…...

概率论与数理统计_下_科学出版社

contents 前言第5章 大数定律与中心极限定理独立同分布中心极限定理 第6章 数理统计的基本概念6.1 总体与样本6.2 经验分布与频率直方图6.3 统计量6.4 正态总体抽样分布定理6.4.1 卡方分布、t 分布、F 分布6.4.2 正态总体抽样分布基本定理 第7章 参数估计7.1 点估计7.1.1 矩估计…...

Android 复习layer-list使用

<shape android:shape"rectangle"> <size android:width"1dp" android:height"100px" /> <solid android:color"#FFFFFF" /> </shape> 通过shape画线段,通过 <item android:gravity"left|top"…...

汉光联创HGLM2200N黑白激光多功能一体机加粉及常见问题处理

基本参数&#xff1a; 机器型号&#xff1a;HGLM2200N 产品名称&#xff1a;A4黑白激光多功能一体机 基础功能&#xff1a;打印、扫描、复印 打印速度&#xff1a;22页/分钟 纸张输入容量&#xff1a;150-249页 单面支持纸张尺寸&#xff1a;A4、A5、A6 产品尺寸&#x…...

引领汽车软件开发走向ASPICE认证之路

亚远景科技与ASPICE认证的关系可以从以下几个方面来阐述&#xff1a; (要明确的是&#xff1a;在ASPICE行业中专业来说&#xff0c;ASPICE项目是没有认证&#xff0c;而只有评估。不过&#xff0c;为了方便沟通&#xff0c;人们常将这一评估过程称为认证。&#xff09; 行业专…...

【C/C++ new/delete和malloc/free的异同及原理】

new/delete和malloc/free都是用于在C&#xff08;以及C语言在malloc/free的情况下&#xff09;中动态申请和释放内存的机制&#xff0c;但它们之间存在一些显著的异同点。以下是对这两组函数/运算符的异同点的详细分析&#xff1a; 相同点 目的相同&#xff1a;两者都用于在堆…...

Maven Archetype 自定义项目模板:高效开发的最佳实践

文章目录 前言一、Maven Archetype二、创建自定义 Maven Archetype三、定制 Archetype 模板四、手动创建 Archetype 模板项目五、FAQ5.1 如何删除自定义的模板5.2 是否可以在模板中使用空文件夹 六、小结推荐阅读 前言 在软件开发中&#xff0c;标准化和快速初始化项目结构能够…...

vue的ESLint 4格缩进 笔记

https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一&#xff0c;代码4格缩进设置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自动修复命令 npx eslint --fix "src/**/*.{…...

【前端项目笔记】8 订单管理

订单管理 效果展示&#xff1a; 在开发功能之前先创建分支order cls 清屏 git branch 查看所有分支&#xff08;*代表当前分支&#xff09; git checkout -b order 新建分支order git push -u origin order 将本地的当前分支提交到云端仓库origin中命名为order 通过路由方式…...

构建Yarn依赖树:深入解析与实践指南

构建Yarn依赖树&#xff1a;深入解析与实践指南 在现代JavaScript开发中&#xff0c;依赖管理是项目成功的关键。Yarn&#xff0c;作为Node.js生态系统中一个强大的包管理器&#xff0c;以其快速、可靠和安全的特性而闻名。本文将深入探讨Yarn如何构建依赖树&#xff0c;并提供…...

社区活动|FlowUs知识库的发展|先进技术的落地应用|下一代生产力工具你用了吗

在当今快速发展的数字化时代&#xff0c;技术的进步不断推动着工作方式和知识管理的革新。FlowUs&#xff0c;作为一款前沿的知识管理和协作平台&#xff0c;正站在这一变革的浪潮之巅&#xff0c;引领着智能工作的新潮流。 智能化的智能学习引导工具 FlowUs不仅仅是一个工具&…...

Python基础语法(与C++对比)(持续更新ing)

代码块 Python在统一缩进体系内&#xff0c;为同一代码块C{...}内部的为同一代码块 注释 Python 单行注释&#xff1a;#... 多行注释&#xff1a;... C 单行注释&#xff1a;//... 多行注释: /*...*/ 数据类型 1. Python数据类型 Python中支持数字之间使用下划线 _ 分割…...

LeetCode-Leetcode 1120:子树的最大平均值

LeetCode-Leetcode 1120&#xff1a;子树的最大平均值 题目描述&#xff1a;解题思路一&#xff1a;递归解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一棵二叉树的根节点 root&#xff0c;找出这棵树的 每一棵 子树的 平均值 中的 最大 值。 子…...

AI在软件开发中的角色:助手还是取代者?

目录 前言 一、AI工具现状&#xff1a;高效助手的崛起 二、AI对开发者的影响&#xff1a;新技能与竞争力的重塑 三、AI开发的未来&#xff1a;共生而非取代 写在最后 前言 随着科技的飞速发展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在软件开发领域的应用日…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...