初阶数据结构之二叉树

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

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

手搓二叉树

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);
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis-Plus eq ne gt lt ge le分别代表含义 条件构造器

一、条件构造器函数列表 函数名说明说明/例子allEq入参都满足条件例:allEq({"id": 1, "name": "张三", "age": null})--->id 1 and name 张三 and age is nulleq等于例:eq("name", "张三…

dc-3靶机渗透

环境准备 dc-3靶机下载链接: https://download.vulnhub.com/dc/DC-3-2.zip 启动靶机遇到的问题解决文章在下面 http://t.csdnimg.cn/zLQAI kali最新版 dc-3靶机 两台机器都在vmware上运行 网络设置NAT模式 渗透过程 信息收集 首先使用ifconfig获取kali的IP地址 可…

day04-组织架构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息,可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

CSS filter(滤镜)属性,并实现页面置灰效果

目录 一、filter(滤镜)属性 二、准备工作 三、常用的filter属性值 1、blur(px) 2、brightness(%) 3、contrast(%) 4、grayscale(%) 5、opacity(%) 6、saturate(%) 7、sepia(%) 8、invert(%) 9、hue-rotate(deg) 10、drop-shadow(h-shadow v…

【Godot4.2】用PlantUML和语雀画UML类图

概述 UML:统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。PlantUML:是一个开源工具,它允许我们用文本形式来描绘和创建UML图。在VSCode中可以安装扩展来绘制,而在语雀的MarkDown编辑器中&#xff…

震惊!运气竟能如此放大!运气的惊人作用,你了解吗?

芒格:得到你想要的东西,最保险的办法,就是让自己配得上你想要的那个东西。今天仔细想了想这句话,他其实说的是无数成功人士的心声 —— “我配得上!” 美剧《绝命毒师》有个导演叫文斯吉里根(Vince Gilliga…

如何看待制造业数字化转型?从不同维度来聊一聊

作为一名TOB行业9年经验的老兵,近期我们团队拜访了不少制造企业,其以中小型企业居多,在与企业负责人交流数字化转型话题时,感触最多的还是管理者对“数字化转型”的认知。在数字化转型方面从国家层面到地方政府进行大量的宣传与政…

数据结构 1.1 数据结构的基本概念

本章总览: 一.什么是数据 1.数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程 序识别和处理的符号的集合。数据是计算机程序加工的原料。 早期计算机只能处理纯数值的问题,如世界第一题计算机ENI…

【京存】AI人工智能时代的分布式存储

如今,AI人工智能的浪潮席卷全球,数据以前所未有的速度增长与积累。如何高效存储、管理和利用海量数据,成为推动AI发展的关键。 今日,我们将为您深度剖析AI人工智能分布式存储方案,伴随AI技术在图像识别、自然语言处理…

金融(基金)行业信创国产化特点及统一身份认证解决方案

金融业在政策支持及自主驱动下,金融信创取得快速发展。从2020年开始,三期试点已扩容至5000余家,进入全面推广阶段。而基金行业信创建设与银行、证券、保险这些试点行业相比,进展较为缓慢。 基金行业信创当前面临的问题 与多家基…

百度出品_文心快码Comate提升程序猿效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能, 1)指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2)插件包含 3)指令包含如下功能: 官网链接

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

盘点几款国产AI高效神器!打工人赶紧码住

在这个AI技术飞速发展的时代,国产AI工具正成为提升工作效率的得力助手。作为AI工具测评博主,米兔有幸体验了多款国产AI工具,今天要向大家介绍几款超级好用的AI工具。这些工具不仅功能强大,而且操作简便,是职场人士不可…

贵的智能猫砂盆值得买吗?包含百元、千元的高性价比品牌推荐!

对于养猫的上班族来说,智能猫砂盆真的是越早买越好,普通猫砂盆用这么久下来能把我们这些上班的都累死,每次一回到家就能闻到猫屎的臭味,一看就收获猫砂盆里满满当当的猫屎,在外面要上班,在家里也要给猫上班…

API-正则表达式

学习目标: 掌握正则表达式 学习内容: 什么是正则表达式语法元字符修饰符 什么是正则表达式: 正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。 通常用来查找、替换那些符合正则表达式的文本&a…

二叉树的链式访问 与 二叉树专题

目录 二叉树的前、中、后序遍历求二叉树第K层节点的个数二叉树查找值为x的节点leetcode相同的树对称二叉树二叉树的前序遍历另一棵子树牛客 二叉树的遍历 二叉树的前、中、后序遍历 1.前序遍历:先访问根节点,再访问左子树,最后访问右子树 根…

# windows 安装 mysql 显示 no packages found 解决方法

windows 安装 mysql 显示 no packages found 解决方法 一、问题描述: 安装 mysql 时,出现 no packages found 不能进行下一步安装了, 如下图: 二、解决方法: 1、路径问题,系统不能识别你的安装包路径&…

MTK6769芯片性能参数_MT6769规格书_datasheet

联发科MT6769处理器采用了台积电12nm工艺。它具有8核CPU,采用2Cortex A75 2.0GHz 6Cortex A55 1.7GHz的构架。该处理器搭载了Mali-G52 MC2 GPU,运行速度高达820MHz,能够提供出色的图形处理性能。此外,MT6769还提供高达8GB的快速L…

无法启动此程序,因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。

在windows server2012系统中利用WinSW部署jar包时,报错:无法启动此程序,因为计算机中丢失 api-ms-win-crt-string-11-1-0.dl。尝试重新安装该程序以解决此问题。 原因: 缺少Microsoft Visual C 2015运行库或者已安装低版本运行库…

DevExpress WPF中文教程:Grid - 如何显示摘要(设计时)?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…