二叉树基础篇

news2024/9/20 14:55:08

目录

一.树形结构

 二.基本概念

 三.二叉树种类及性质

1.满二叉树

2.完全二叉树

3.完满二叉树

4.平衡二叉树

5.二叉树的性质

6.性质相关习题

 四.二叉树的存储方式

五. 二叉树的遍历方式

六.二叉树的定义


一.树形结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合

它具有以下的特点

  • 有一个特殊的结点,称为根结点,根结点没有前驱结点
  • 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
  • 树是递归定义的。

注意

  • 树形结构中,子树之间不能有交集,否则就不是树形结构 
  • 一棵N个结点的树有N-1条边。

 二.基本概念

  • 根节点:位于二叉树顶层的节点,没有父节点。
  • 叶节点:没有子节点的节点,其两个指针均指向 None 。
  • :连接两个节点的线段,即节点引用(指针)。
  • 节点所在的层:从顶至底递增,根节点所在层为 1 。
  • 节点的度:节点的子节点的数量。在二叉树中,度的取值范围是 0、1、2 。
  • 二叉树的高度/深度:从根节点到最远叶节点所经过的边的数量。
  • 节点的深度:从根节点到该节点所经过的边的数量。
  • 节点的高度:从距离该节点最远的叶节点到该节点所经过的边的数量。
    有些题目或教材可能会将其定义为“经过的节点的数量”。在这种情况下,高度和深度都需要加 1 。
  • 以上重点记忆   
     

  • 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G...等节点为分支结点
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点
  • 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点
  • 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先
  • 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙 森林:由m(m>=0)棵互不相交的树组成的集合称为森林

 三.二叉树种类及性质

1.满二叉树

满二叉树: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。也就是说,如果一棵 二叉树的层数为K,且结点总数是2^k - 1 ,则它就是满二叉树。

2.完全二叉树

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

3.完满二叉树

完满二叉树:除了叶节点之外,其余所有节点都有两个子节点。 

4.平衡二叉树

平衡二叉树:中任意节点的左子树和右子树的高度之差的绝对值不超过 1 。 

5.二叉树的性质

  1. 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2^i-1 (i>0)个结点
  2. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 (k>=0)
  3. 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,
    则有n0=n2+1
  4. 具有n个结点的完全二叉树的深度k为 log2(n+1) 上取整
  5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i 的结点有:
        若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点
        若2i+1<n,左孩子序号:2i+1,否则无左孩子
        若2i+2<n,右孩子序号:2i+2,否则无右孩子 
  6. 在完全二叉树中,如果节点总个数为奇数,则没有度为1的节点;如果节点总个数为偶数,只有一个度为1的节点。

6.性质相关习题

题目:某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为?
 

题解:由二叉树的性质,如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1,所以n0 = 199 +1 = 200.

题目:在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

题解:  

2n为偶数,因此有一个度为1的节点。

2n = n0 + 1 + n2 = n0 + 1 + n0 - 1

2n = 2n0

n0 = n

题目:一个具有767个节点的完全二叉树,其叶子节点个数为()  

767为奇数没有度为1的节点,767 = n0 + n1 + n2     767 = n0 + 0 + n2

题解:n0 = n2 + 1推出n2 = n0 - 1      767 = n0 + 0 + n0 -1  -> 767 = 2n0 - 1

所以:n0 = 768 / 2 = 384

题目:一棵完全二叉树的节点数为531个,那么这棵树的高度为( )

题解:已知节点求高度,运用性质4,h = log(n+1)向上取证。h = log(531+1),向上取整为10

题目:将一颗有 100 个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根节点编号为 1 ,则编号为 98 的节点的父节点编号为()

因为根节点编号从1开始且为完全二叉树,根据性质若2i<n,左孩子序号:2i

所以父节点为98/2 = 49

题目: 一颗拥有1000个结点的树,树的度(即一个节点的最大子节点数)为4,则它的最小深度是( )

当这棵树每一层都是满的时,它的深度最小。也就是说,这棵树应当是一棵满四叉树。

高度为h,则这个树的节点个数为(4^h - 1) / 3,当h = 5, 最大节点数为341, 当h = 6, 最大节点数为1365,所以最小深度应该为6。

题目:在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个。 

题解:令n3 = 2;n2 = 1;n1 = 2;设总结点的个数为N

则由节点个数的关系得 N = n3 + n2 + n1 + n0,由边条数的关系得 N-1 = 3*n3 + 2*n2 + 1*n1 + 0*n0

联立可得:N = 2 + 1 + 2 + n0,N-1 = 3*2 + 2*1 + 1*2 + 0

n0 = 6

 四.二叉树的存储方式

二叉树可以链式存储,也可以顺序存储。

链式存储方式就用指针, 顺序存储的方式就是用数组。

链式(指针指向)

顺序(数组):


 

用数组来存储二叉树如何遍历的呢?

如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

五. 二叉树的遍历方式

二叉树主要有两种遍历方式:

  1. 深度优先遍历:先往深走,遇到叶子节点再往回走。
  2. 广度优先遍历:一层一层的去遍历。

  • 深度优先遍历
    • 前序遍历(递归法,迭代法)         遵循根左右的顺序
    • 中序遍历(递归法,迭代法)          遵循左根右的顺序
    • 后序遍历(递归法,迭代法)          遵循左右根的顺序
  • 广度优先遍历
    • 层序遍历(迭代法)        从上到下从左到右遍历 

六.二叉树的定义

class TreeNode {
        public char val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(char val) {
            this.val = val;
        }
    }


    public TreeNode createTree (){
        TreeNode A = new TreeNode('A');
        TreeNode B = new TreeNode('B');
        TreeNode C = new TreeNode('C');
        TreeNode D = new TreeNode('D');
        TreeNode E = new TreeNode('E');
        TreeNode F = new TreeNode('F');
        TreeNode G = new TreeNode('G');
        TreeNode H = new TreeNode('H');

        A.left = B;
        A.right = C;
        B.left = D;
        B.right = E;
        C.left = F;
        C.right = G;
        E.right = H;

        return A;
    }

 

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

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

相关文章

SAP QM 取消UD 决策

SAP QM 取消UD 决策。 SAP提供了相关Notes用于取消UD决策。 C24010PA 这个批次已经做了UD 决策 C24010PA目前库存已经是非限制库存 执行操作 成功后检查,自动产生了322,检验批状态也变回来了。 取消原来的生产入库也是Ok的。 测试成功。 需要用到以下两个Notes。 Notes(S…

【深度学习】深度学习基础

李宏毅深度学习笔记 局部极小值与鞍点 鞍点其实就是梯度是零且区别于局部极小值和局部极大值的点。 鞍点的叫法是因为其形状像马鞍。鞍点的梯度为零&#xff0c;但它不是局部极小值。我们把梯度为零的点统称为临界点&#xff08;critical point&#xff09;。损失没有办法再下…

【机器学习】自然语言处理的新前沿:GPT-4与Data Analysis

目录 1、生成二维码Prompt&#xff1a;请用二维码编码这个信息&#xff0c;我爱chatgpt2、分析PDFPrompt&#xff1a;请分析这篇pdf的主要内容&#xff0c;用中文输出分析结果&#xff0c;100字3、设计网站Prompt&#xff1a;请帮我设计一个网站&#xff0c;网站的主题是哪吒玩…

下穿隧道结构安全该如何保证,检测跟自动化监测该如何抉择

隧道监测背景&#xff1a; 隧道所处的地下环境较为复杂&#xff0c;易受地质条件恶化、结构损伤、退化失稳以及自然灾害等因素影响&#xff0c;引发隧道拱顶开裂、边墙开裂、衬砌损坏、隧道渗漏水、围岩大变形等病害&#xff0c;从而导致隧道安全事故发生&#xff0c;尤其在长期…

查普曼大学团队使用惯性动捕系统制作动画短片

道奇电影和媒体艺术学院是查普曼大学的知名学院&#xff0c;同时也是美国首屈一指的电影学院之一&#xff0c;拥有一流电影制作工作室。 最近&#xff0c;道奇学院的一个学生制作团队接手了一个项目&#xff0c;该项目要求使用真人动作、视觉效果以及真人演员和CG角色之间的互动…

斜光测距的原理及python实现

1.前言 最近做了一个基于opencv的斜光测距的小项目&#xff0c;东西不多&#xff0c;但是很有意思&#xff0c;值得拿出来学一学。项目里面需要比较精确的定位功能&#xff0c;将前人matlab代码移植到python上&#xff0c;并且做了一些优化&#xff0c;简化逻辑(毕竟我是专业的…

智芯开发板----环境配置

一、软件准备 Keil IDE/ IAR IdeSupport_Install_Package已经上传到资源中自行下载即可。 二、IAR环境配置 1.首先将IdeSupport_Install_Package内的IAR文件复制到你的IAR安装路径中如图所示&#xff1a; 2.按如图所示的路径进行复制即可 3.以记事本的方式打开这个xml文件…

基于大数据架构的内容安全风控与分析

1 项目介绍 1.1 研究目的和意义 在数字化时代&#xff0c;内容安全成为了互联网企业面临的一个重要挑战。海量数据的产生与传播&#xff0c;伴随着不良信息和网络安全威胁的日益增加。因此&#xff0c;本课题旨在通过构建一个基于大数据架构的内容安全风控与分析系统&#xf…

绿盟又行了,漏管市场占有率第一

漏洞管理平台 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 今天看到不少朋友圈在转发&#xff…

用合成数据训练边缘侧火灾检测器

火灾是人类面临的重大威胁&#xff0c;检测火灾至关重要。目前的火焰传感器在距离检测方面存在局限性。为了克服这个问题&#xff0c;我的目标是使用机器学习方法创建一个轻量级且高度准确的火灾检测系统。当需要实时数据处理或机器学习模型可用的数据集很少时&#xff0c;这个…

《昇思25天学习打卡营第5天 | 昇思MindSpore网络构建》

第五天 今天学习了神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不同…

大厂程序员上班猝死成常态?

大家好&#xff0c;我是瑶琴呀&#xff0c;拥有一头黑长直秀发的女程序员。 近日&#xff0c;连续看到大厂程序员猝死、低血糖晕倒的新闻&#xff0c;同为程序员感到很难受。互联网加班成常态这是既定事实&#xff0c;尤其在这个内卷严重、经济不景气的环境中&#xff0c;加班…

CAM350如何移动元素?

CAM350如何移动元素&#xff1f; 1、选择菜单栏Edit→Move 2、然后按W键&#xff0c;光标变为下图的形状&#xff0c;然后框选需要移动的元素。 3、框选元素后如下图所示&#xff0c;然后右击&#xff0c;退出框选命令。 4、然后点选一个原点开始移动所选的元素。 移动后如下图…

数据分析ClickHouse学习笔记

一、ClickHouse基础 1.1 ClickHouse介绍 ClickHouse是一个用于联机分析(OLAP)的列式DBMS。 简单来说&#xff0c;相比MySQL等行式数据库&#xff0c;数据存储方式是&#xff1a; Rowidis_deltitlesexcreateAt#021a12024/2/18 5:19#130b12024/2/18 8:10#241c12024/2/18 7:38…

车载测试工程师在行业中有哪些挑战需要面对?

车载测试工程师在行业中面临着多方面的挑战&#xff0c;这些挑战涵盖了技术、安全、法规以及市场环境等多个层面。 1. 技术挑战&#xff1a; 复杂性与集成性&#xff1a;现代汽车系统由众多模块和子系统组成&#xff0c;包括发动机控制、安全系统、娱乐系统、导航系统等。这些系…

新品Coming Soon!OAK-D-SR-PoE:使用3D+AI视觉结合ToF实现箱体测量和鉴别!

OAKChina 新品&#xff1a;OAK-D SR PoE结合ToF实现箱体检测 3DAI解决方案提供商 手动测量箱体、缺陷、大小等操作可能是一项繁琐并且劳累而机械的任务&#xff0c;但OAK中国本次将提供了更好的解决方案&#xff1a;3DAI视觉处理箱体的识别和检测&#xff0c;使用了即将发布的…

KVM性能优化之网络性能优化

1、使用virtio半虚拟化网卡 在Virt- Manager图形界面里指定下&#xff1a; 当然也可以编辑XML文件&#xff0c;添加<model typevirtio/> 如果你不指定&#xff0c;那么虚拟机会默认使用8139的全虚拟化网卡&#xff0c;8139网卡是Realtek的百兆。 2、使用vhost_net v…

Windows和Linux C++判断磁盘空间是否充足

基本是由百度Ai写代码生成的&#xff0c;记录一下。实现此功能需要调用系统的API函数。 对于Windows&#xff0c;可调用函数GetDiskFreeSpaceEx&#xff0c;使用该函数需要包含头文件windows.h。该函数的原型&#xff1a; 它的四个参数&#xff1a; lpDirectoryName&#xff0…

Gitlab上传代码时自动触发Jenkins构建代码配置

Jenkins配置构建触发器&#xff0c;勾选Build when a change is pushed to GitLab 记得记住对应url 在下面生成一个Jenkins的Secret token 打开Gitlab配置Webhooks 保存后测试 可正常构建并推送

DIY:在您的 PC 上本地使用 Stable Diffusion AI 模型生成图像

前言 随着DALL-E-2和Midjourney的发布&#xff0c;您可能听说过最近 AI 生成艺术的繁荣。这些人工智能模型如何在几秒钟内创造性地生成逼真的图像&#xff0c;这绝对是令人兴奋的。您可以在这里查看其中的一些&#xff1a;DALL-E-2 gallery和Midjourney gallery 但是这些模型…