【数据结构 | 二叉树入门】

数据结构 | 二叉树入门

  • 二叉树概念:
    • 二叉树特点:
    • 二叉树的基本形态
      • 特殊二叉树
        • 满二叉树
        • 完全二叉树
    • 二叉树的存储结构
    • 二叉树的遍历
      • 先序遍历
      • 中序遍历
      • 后序遍历
    • 计算二叉树的节点个数
    • 计算叶子节点的个数
    • 树的高度
    • 求第k层节点个数

二叉树概念:

如下图,是一个二叉树,二叉树是一种特殊的树。
在这里插入图片描述

二叉树特点:

  1. 二叉树的每个节点都最多有棵树,所以二叉树的中不存在度大于2的节点。
  2. 二叉树的左右子树是有顺序的,次序不可颠倒
    在这里插入图片描述
    如图,树1树2 就不是同一颗树。

二叉树的基本形态

二叉树具有以下五种基本形态:
(1)空二叉树
(2)只有一个根结点。
(3)根结点只有左子树
(4)根结点只有右子树
(5)根结点既有左子树又有右子树
在这里插入图片描述

特殊二叉树

满二叉树

在一棵二叉树中,如果所有分支结点都存在左子树和右子树并目所有叶子都在同
一层上,这样的二叉树称为满二叉树。

满二叉树:

在这里插入图片描述

完全二叉树

对于未满的<满二叉树> 并且从左到右连续的满二叉树称为完全二叉树。

在这里插入图片描述

以下均不是完全二叉树:
在这里插入图片描述

二叉树的存储结构

对于二叉树的存储一般采用链式存储

二叉树每个结点最多有两个孩子,所以为它设计一个数据域两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表

在这里插入图片描述

在这里插入图片描述

二叉树的遍历

先序遍历

在这里插入图片描述

算法如下:

在这里插入图片描述

对于一般空的节点我们用N表示:
则这棵树的先序遍历为
在这里插入图片描述

//先序遍历
void PrevOrder(TreeNode* root)
{if (root == NULL){printf("N ");return 0;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}

递归示意图如下:
在这里插入图片描述

中序遍历

在这里插入图片描述

算法如下:
在这里插入图片描述

则这棵树的中序遍历为
在这里插入图片描述

//中序遍历
void InOrder(TreeNode* root)
{if (root == NULL){printf("N ");return 0;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}

后序遍历

在这里插入图片描述

算法如下

在这里插入图片描述
则这棵树的后序遍历:
在这里插入图片描述

代码:

//后序遍历
void PostOrder(TreeNode* root)
{if (root == NULL){printf("N ");return 0;}InOrder(root->left);InOrder(root->right);printf("%d ", root->data);
}

计算二叉树的节点个数

顾名思义,计算一颗树的节点个数,传入该树的跟节点,采用分治的思路:

在这里插入图片描述
在这里插入图片描述

int TreeSize(TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}

在这里插入图片描述
在这里插入图片描述

计算叶子节点的个数

在这里插入图片描述

递归图如下:

在这里插入图片描述

采用分治的思想,从root开始递归,有叶子节点就返回1,这个二叉树一共三个叶子节点,所以有返回3次1,相加得3.

//叶子节点的个数
int TreeLeafSize(TreeNode* root)
{//空 返回0if (root == NULL){return 0;}//不是空,是叶子,返回1if (root->left == NULL && root->right == NULL)return 1;//不是空,也不是叶子,   分治 == 左右子树叶子之和return TreeLeafSize(root->left) + TreeLeafSize(root->right);
}

在这里插入图片描述
在这里插入图片描述

树的高度

在这里插入图片描述

递归图如下:

在这里插入图片描述

采用分治的思想:分别计算左数高度右数高度,比较取最大。

代码如下:

//树的高度
int TreeHeight(TreeNode* root)
{if (root == NULL)return 0;int leftHeight = TreeHeight(root->left);int rightHeight = TreeHeight(root->right);return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}

在这里插入图片描述
在这里插入图片描述

求第k层节点个数

在这里插入图片描述

递归图如下:

在这里插入图片描述
还是采用分治思想,当k=1时,返回一个节点数。

代码如下:

//第k层个数
int TreeLevelK(TreeNode* root, int k)
{assert(k > 0);if (root == NULL)return 0;if (k == 1)return 1;return TreeLevelK(root->left, k - 1) + TreeLevelK(root->right, k - 1);
}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

怎么将营业执照图片转为excel表格?(批量合并识别技巧)

一、为何要将营业执照转为excel表格&#xff1f; 1、方便管理&#xff1a;将营业执照转为excel格式&#xff0c;可以方便地进行管理和整理&#xff0c;快速查找需要的信息。 2、数据处理&#xff1a;Excel可以提供丰富的计算和数据分析功能&#xff0c;转化为excel后方便数据…

12.字符串和正则表达式

使用正则表达式 正则表达式相关知识 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要&#xff0c;正则表达式就是用于描述这些规则的工具&#xff0c;换句话说正则表达式是一种工具&#xff0c;它定义了字符串的匹配模式&#xff08;…

Ubuntu上安装VMware+win11系统手册

Ubuntu安装vmware 下载&#xff1a; Linux 版下载地址&#xff1a;https://www.vmware.com/go/getworkstation-linux 安装&#xff1a; sudo chmod x VMware-Workstation-Full-17.5.0-22583795.x86_64.bundle 执行安装命令&#xff1a; sudo ./VMware-Workstation-Full-17.5.0…

AArch64 memory management学习(二)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第二章。…

python基础教程八(循环1)

1. while循环 为避免多次重复的代码&#xff0c;我们会用到循环 while (condition): 执行语句 while循环的结构非常简单只要条件满足就一直循环直到&#xff0c;条件不满足为止。 例子如下&#xff1a; x1 while x<100:print(x)x1结果就是最简单的输出1-100的数字 while…

西电期末考点总结

一.“打擂台” 介绍 打擂台用于找到一个数组中的最值问题&#xff0c;先设置一个虚拟擂主&#xff0c;并保证他是“最弱的”&#xff0c;然后遍历数组&#xff0c;找到“更强的”数据&#xff0c;就交换擂主&#xff0c;“打”到最后的“擂主”就是最值数据 相关题目 1004.…

Vant2组件库van-list+Toast下拉加载滚动条回顶问题

目录 List 列表 Toast 轻提示 解决方案 1、不使用 Toast 的 加载提示 2、修改调整 pointer-event 属性值 3、判断是否为第一次加载再使用 背景 &#xff1a; 移动端项目 开发时&#xff0c;有数据长列表展示的场景需求&#xff0c;此时就用到了 Vant2 组件库里面的 <v…

Tsmaster使用笔记整理

选择厂商 根据你所选择的CAN分析仪的厂商&#xff0c;确定你的厂商设备设置。 我一般会选择PEAK&#xff0c;和 ZLG多一点&#xff0c;其他的没有用过。除了上图中的&#xff0c;市面上的CAN分析仪还有CANanlyst、广成科技、创芯科技等&#xff0c;但它们都不能在Tsmaster上使…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说&#xff0c;防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行&#xff0c;浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

ATTCK视角下的信息收集:组策略信息收集

目录 什么是组策略&#xff1f; 本地组策略收集 域组策略收集 组策略存储收集 组策略对象收集 什么是组策略&#xff1f; Windows中的组策略&#xff08;Group Policy&#xff09;是一种管理和配置Windows操作系统的功能&#xff0c;它允许系统管理员对计算机和用户的行为…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户信息修改实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Qt 6之五:创建菜单

Qt 6之五&#xff1a;创建菜单 Qt是一种跨平台的C应用程序开发框架&#xff0c;它提供了一套丰富的工具和库&#xff0c;可以帮助开发者快速构建跨平台的应用程序&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;和非GUI应用程序。 Qt 6之一&#xff1a;简介、安…

untiy使用http下载资源

文章目录 提醒下载一个资源并保存到本地下载一张图片 提醒 部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用 下载一个资源并保存到本地 private IEnumerator DownloadFormServer_IE(st…

cisp难不难?cisp如何备考通过率高?

*CISP 全称为Certified Information Security Professional&#xff0c;是国际上广受欢迎的信息安全专业认证之一。 对于许多信息安全领域的从业者来说&#xff0c;CISP认证是他们职业生涯中的重要一步。那么&#xff0c;CISP难不难呢?如何备考通过率更高呢?接下来&#xf…

详细探讨mfc140.dll丢失的解决方法,并比较各种方法的优劣

mfc140.dll是Microsoft Foundation Class (MFC) 库中一个重要的DLL文件&#xff0c;它包含了多个执行程序使用的函数和资源。这个库通常用于开发Windows操作系统上的应用程序。但有时会发生mfc140.dll缺失或损坏的错误&#xff0c;导致一些依赖它的应用程序无法运行。今天的这篇…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

2024年中国电子学会青少年编程等级考试安排的通知

各有关单位、全体考生: 中国电子学会青少年等级考试&#xff08;以下简称等级考试&#xff09;是中国电子学会为落实《全民科学素质行动规划纲要》&#xff0c;提升青少年电子信息科学素质水平而开展的社会化评价项目。等级考试自2011年启动以来&#xff0c;作为中国电子学会科…

微服务概述之单体架构

微服务概述 互联网始于 1969年美国的阿帕网&#xff08;ARPA&#xff09;&#xff0c;最开始的阿帕网只在美国军方使用。随着时间的推移&#xff0c;一些大学也开始加入建设&#xff0c;慢慢演化成了现在的因特网 &#xff08;Internet&#xff09;。随着计算机网络的普及&…

使用STM32和MPU6050实现基于手势的室内导航系统

基于STM32和MPU6050的基于手势的室内导航系统是一个创新而具有挑战性的项目。在本文中&#xff0c;我们将介绍如何利用STM32微控制器和MPU6050传感器实现基于手势的室内导航系统&#xff0c;并提供相应的代码示例。 1. 系统概述 基于手势的室内导航系统旨在通过手势识别的方式…

Web前端-jQuery

文章目录 jQuery1.1 jQuery 介绍1.1.1 JavaScript 库1.1.2 jQuery的概念1.1.3 jQuery的优点 1.2 jQuery 的基本使用1.2.1 jQuery 的下载1.2.2 jQuery快速入门1.2.3 jQuery入口函数1.2.4 jQuery中的顶级对象$1.2.5 jQuery 对象和 DOM 对象1.2.6. jQuery 对象和 DOM 对象转换 1.3…