【数据结构】二叉树概念 | 满二叉树 | 完全二叉树

news2024/9/24 18:52:59

二叉树的概念

二叉树在实践中用的很多。

一棵二叉树是结点的一个有限集合,该集合:

  • 或者为空
  • 一个根结点加上两棵别称为左子树右子树的二叉树组成。
  • 二叉树最多两个孩子

这里注意:二叉树并不是度为2的树

二叉树的度最大值是2,并不是说它的度一定为2。所以一下这四种情况也均是二叉树:

  • 空树
  • 只有根节点
  • 只有左子树
  • 只有右子树
  • 左右子树均存在

二叉树不存在度大于2的节点;

二叉树的子树有左右之分次序是不能颠倒的,因此二叉树是有序树

二叉树通俗也可以理解为对树进行了“计划生育”。 “计划生育”也就是生两个小孩,但是是每一家来说都是生两个吗?

那么度为2的一定是二叉树吗?

  • 度为2一定是二叉树。度为2的话,那么所有节点的最大的度就是2,而二叉树的概念是不存在度大于2的节点。
  • 二叉树是一个特殊的树,它的度最大为2,但是并没有说一定为2。

特殊的二叉树

满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,那么这个二叉树就是满二叉树。也就是说,如果一个二叉树的成熟为K,那么结点总数就是2^{K}-1,那么它就是满二叉树。

根据上图:

  • 假设高度为h,那么就会有2^{h}-1的节点;
  • 那么假设树有N个节点的话,那就是 2^{h}-1=N;那么 高度就为 h=\log _{2}(N+1)

完全二叉树

完全二叉树,前h-1层都是满的,最后一层不一定满,但是从左到右必须连续

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深入为K的,有n个节点的二叉树,当且仅当其每一个节点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。要注意的是满二叉树是一种特殊的完全二叉树。

这里注意二叉树顺序是固定的,必须是连续的。

假设完全二叉树的高度为h,那么它的结点数量是多少呢?

完全二叉树的最后一层的范围: \left [ 2^{h-1},2^{h}-1 \right ]

思路:

  • 这里我们想在满二叉树中,结点数为2^{h}-1
  • 那么满二叉树中的上一层就是有2^{h-1}-1
  • 因为完全二叉树就是满二叉树的基础上,最后一层不满,也就是最后一层的结点数最多有2^{h-1},最少有1个;
  • 所以根据等比公式可以求得出完全二叉树最后一层的范围为: \left [ 2^{h-1} , 2^{h}-1 \right ]

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

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

相关文章

我叫:快速排序【JAVA】

1.自我介绍 1.快速排序是由东尼霍尔所发展的一种排序算法。 2.快速排序又是一种分而治之思想在排序算法上的典型应用。 3.本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。 2.思想共享 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟…

GIT,解决远程分支冲突

背景:当远程分支A 与maste 有冲突如何解决–此时无法在这两个版本之间merge 1、切换到master分支: git checkout master 2、更新master分支代码: git pull 3、再次切换到自己新建的分支: git checkout add_login_check_func 4、将…

【腾讯云云上实验室-向量数据库】Tencent Cloud VectorDB在实战项目中替换Milvus测试

为什么尝试使用Tencent Cloud VectorDB替换Milvus向量库? 亮点:Tencent Cloud VectorDB支持Embedding,免去自己搭建模型的负担(搭建一个生产环境的模型实在耗费精力和体力)。 腾讯云向量数据库是什么? 腾…

硬件连通性测试为何很重要?

在现代企业和个人生活中,依赖于各种硬件设备的情况越来越普遍。硬件设备的正常运行对于业务和日常生活至关重要。硬件连通性测试是一种关键的质量保证手段,旨在确保各种硬件设备之间的通信和协作无障碍。本文将深入探讨硬件连通性测试的重要性。 系统可靠…

ToDesk提示通道限制 - 解决方案

问题 使用ToDesk进行远程控制时,免费个人账号最多支持1个设备同时发起远控,若使用此账号同时在2个设备发起远控,则会提示通道限制,如下图: 解决方案 方案1:断开其它远控 出现通道限制弹窗时&#xff0…

超级武器!深入LoadRunner性能测试流程及极速分析结果!

性能测试目的 1 什么是性能测试? 性能测试是通过性能的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能&#xff0…

竞赛选题 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…

Selenium实现多页面切换

当使用 Selenium 进行自动化测试或爬取数据时,有时需要处理多个页面之间的切换。以下是一些可能需要多页面切换的情况: 1、打开新窗口/页面: 在当前页面上点击链接、按钮或执行某些操作时,可能会打开一个新的窗口或页面。此时&a…

机器学习实战-第4章 基于概率论的分类方法: 朴素贝叶斯

朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: 朴素贝叶斯分类。 贝叶斯理论 & 条件概率 贝叶斯理论 …

反转链表系列问题

反转链表系列问题 作者:Grey 原文地址: 博客园:反转链表系列问题 CSDN:反转链表系列问题 反转单链表 题目描述见:LeetCode 206. Reverse Linked List 思路如下 对于任何一个节点 cur 来说,记录一个…

每日一题(LeetCode)----链表--两数相加

每日一题(LeetCode)----链表–两数相加 1.题目(2. 两数相加) 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返…

java飞翔的鸟

一.准备工作 首先创建一个新的Java项目命名为“飞翔的鸟”,并在src中创建一个包命名为“com.qiku.bird",在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”,并向需要的图片素材导入到包内。 二.代码呈现 p…

Unity中Shader的Standard材质解析(一)

文章目录 前言一、在Unity中,按一下步骤准备1、在资源管理面板创建一个 Standard Surface Shader2、因为Standard Surface Shader有很多缺点,所以我们把他转化为顶点片元着色器3、整理只保留主平行光的Shader效果4、精简后的最终代码 前言 在Unity中&am…

Linux:文件系统初步理解

文章目录 文件的初步理解C语言中对文件的接口系统调用的接口位图的理解open调用接口 文件和进程的关系进程和文件的低耦合 如何理解一切皆文件? 本篇总结的是关于Linux中文件的各种知识 文件的初步理解 在前面的文章中有两个观点,1. 文件 内容 属性&…

MySQL数据库约束你真的懂吗?

✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点点关…

浅谈 JVM GC 收集器--系列(一)

又到一年大促时刻,今天我们一起探讨下JVM垃圾回收的问题,写代码的时候想一想如何减少FullGC问题的出现,因为一旦出现频繁FullGC,短时间内没有太好的解决办法,很有可能重启后服务接着FullGC,导致服务可用率降…

Vue3 + Vite + TSX + vue3-ace-editor 踩坑

前言 由于 ace-editor 官网并没有提供各个前端框架Vue,React,Angular的直接使用的适配版本, 所以本次使用的vue3-ace-editor 是个人开源者维护的版本,原生是支持 SFC 模版用的,由于我这里习惯使用 JSX 或 TSX的方式&a…

NSGA-III求解微电网多目标优化调度(MATLAB)

一、NSGA-III简介 NSGA-III算法由Kalyanmoy Deb和Himanshu Jain于 2014年提出。 参考文献:Deb K , Jain H . An Evolutionary Many-Objective Optimization Algorithm Using Reference Point-Based Nondominated Sorting Approach, Part I: Solving Problems With …

Keil Vision5—新建工程project

注意:创建的工程目录必须是纯英文目录 目录 1.开始配置 2.为该路径下新建个文件夹 3.选择器件 4.工程配置 4.右击魔术棒,设置参数 ​编辑 (1)target配置 (2)output配置 (3)c…

Springboot集成swagger之knife4j

knife4j的最终效果&#xff1a; 支持直观的入参介绍、在线调试及离线各种API文档下载。 1 引入pom <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</ver…