二叉树(概念详解)

news2024/12/25 9:11:49

目录

  • 树的概念
  • 完全二叉树和满二叉树
  • 完全二叉树存储
  • 完全二叉树用数组存储

树是一种非线性的数据结构
树是根朝上的,叶子是朝下的
树是递归定义的【根+N棵子树
递归定义:大事化小,可以理解为套娃

树的子树之间是独立的,所以子树之间是不相交的
如果子树之间相交那么这将称为

树的概念

这里就介绍比较重要的
树的关系可以看做是亲缘关系

:就是一个节点含有的子树的个数称为该节点的度
比如A节点含有6个子树,度是6
度为0的叫叶子节点 B C H I P Q
度不为0的叫分支节点 D E F G J
在这里插入图片描述
叶节点:叶节点是没有子树的节点,也是度为0的节点
比如上图中的 P Q

双亲节点或父节点:若一个节点含有子节点,则称这个节点是它子节点的父节点
例如:A是B的父节点

子节点或孩子节点:一个节点含有的子树的根节点,父亲节点的下一个节点是孩子节点
例如:B是A的孩子节点

树的高度或深度:树中节点的最大层次
有两种表示方法:
1.只有根节点表示1层
空树表示0层
2.只有根节点表示0层
空树表示-1层
虽然两种都可以,但是第一种表示方法更好
在这里插入图片描述
树是递归定义的【根+N棵子树
递归定义:大事化小,可以理解为套娃

例如:A树下面有B C D三棵子树,B C D下面又有子树
在这里插入图片描述
在这里插入图片描述

完全二叉树和满二叉树

满二叉树是特殊的二叉树
满二叉树是特殊的完全二叉树
是满二叉树一定是完全二叉树
是完全二叉树不一定是满二叉树

满二叉树:
1.从上到下都是满的,从左到右节点都是连续的

完全二叉树:
1.到h-1层都是满节点的,最后1层是不满的,但是从左到右必须是连续的
2.从左到右中间有空就不是完全二叉树

例如:满二叉树的时间复杂度:O(logN)
找一个节点会找高度次
在这里插入图片描述

完全二叉树存储

完全二叉树可以用数组存储,也可以用链表存储

完全二叉树用数组存储

用数组存储:
逻辑结构:是想象出来的,是完全二叉树
物理结构:是内存中实实在在存储的
在这里插入图片描述
假设父亲的下标是:i
左孩子的下标:2i + 1
右孩子的下标:2
i + 2

假设孩子的下标是:j
父亲的下表是:(j-1) / 2

非完全二叉树可以用数组存储吗?
答案是可以的,但是有很多空间的浪费

栈和堆是一种数据结构

在C语言中也有栈和堆,那它们也是数据结构吗?
答案不是的,C语言中的栈和堆是操作系统中的可以存储数据的空间
比如局部变量就存在于栈上,malloc,动态开辟的空间存储在堆上,数组也存储在堆上

在数据结构中堆也是二叉树的一种
堆又分为小堆和大堆

大堆:
1.父亲节点大于任何一个它的孩子节点(根是最大的)
2.必须是完全二叉树
在这里插入图片描述

小堆:
1.父亲节点小于任何一个它的孩子节点(根是最小的)
2.必须是完全二叉树
在这里插入图片描述

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

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

相关文章

【p-seamless-scroll】一个创建无缝滚动效果的 js 插件

p-seamless-scroll (github:https://github.com/pbstar/p-seamless-scroll)是一个创建无缝滚动效果的 js 插件。它有着轻量且高效的特性,支持丰富的自定义配置选项,提供了一系列 API 方法以及事件监听功能。 特点 丰…

【uniapp】uniapp页面介绍

目录 开发工具:HBuilderX介绍特点和功能 页面简介页面管理新建页面删除页面页面改名pages.json 设置应用首页 页面内容构成template模板区script 脚本区export default 外的代码export default 里的代码 style样式区 页面生命周期Vue2 页面及组件生命周期流程图Vue3…

养猫这5个必备神器你还没用?宠物空气净化器吸毛效果惊人!

养猫的铲屎官们,你们是否经常为家里的猫毛和异味感到困扰?尽管养猫能带来许多欢乐,但随之而来的猫毛和气味问题确实让人头疼。今天,我将为大家介绍养猫的五个必备神器,特别是宠物空气净化器,它在吸毛和去除…

官宣!马斯克的xAI获60亿美元融资,估值240亿美元

5月27日晚,马斯克旗下的大模型平台xAI在官网宣布获得60亿美元B轮融资,估值240亿美元。本次主要投资者包括Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Capital等。 这也是大模型赛道史上最高单笔融资之一,超过Anthr…

Spring:事务(tx)

1. 简介 spring对jdbc进行封装&#xff0c;简化对数据库的操作 2. HelloWorld 1. 搭建模块 2.加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency><groupId>org.springframework</groupId><artifactId>s…

基于ERNIE Bot SDK开发智趣灯谜会游戏

项目背景 猜灯谜是中国传统节日元宵节中一种深受人们喜爱的民间游戏&#xff0c;它集趣味性、知识性和艺术性于一体&#xff0c;是中华文化的重要组成部分。猜灯谜&#xff0c;顾名思义&#xff0c;就是通过解读谜面来猜测谜底&#xff0c;谜底通常是各种物品、现象或概念。 猜…

驱动未来:IT行业的现状与发展趋势

前言 随着技术的不断进步&#xff0c;IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链&#xff0c;这些技术正在重塑我们的生活和工作方式。本文将探讨IT行业的现状和未来发展趋势&#xff0c;并邀请行业领袖、技术专家和…

JAVA面试题大全(十八)

1、说一下 jvm 的主要组成部分&#xff1f;及其作用&#xff1f; 类加载器&#xff08;ClassLoader&#xff09;运行时数据区&#xff08;Runtime Data Area&#xff09;执行引擎&#xff08;Execution Engine&#xff09;本地库接口&#xff08;Native Interface&#xff09;…

如何本地 Debug React 源码

日常开发过程中&#xff0c;有时 debug react 源代码进行问题排查。一种方案是直接把通过 html 引入进来&#xff0c;另外一种是编译并通过 yarn 链接到项目中&#xff0c;本地将介绍如何通过这两种方法进行代码 Debug。 页面引入源代码方式 这种方式比较简单&#xff0c;直接…

【网络协议】一文带你搞懂Tcp和Udp(万字详解)

文章目录 前言一、端口号端口号的范围划分 二、UDP和TCP2.1 UDP2.2 UDP的特点 三、TCP四、TCP的十个核心机制1.确认应答机制2.超时重传3.连接管理--三次握手 四次挥手**三次握手**四次挥手 4.滑动窗口5.流量控制6.阻塞控制7.延迟应答8.捎带应答9.粘包问题10.异常情况 前言 再上…

LabVIEW中实现Trio控制器的以太网通讯

在LabVIEW中实现与Trio控制器的以太网通讯&#xff0c;可以通过使用TCP/IP协议来完成。这种方法包括配置Trio控制器的网络设置、使用LabVIEW中的TCP/IP函数库进行数据传输和接收&#xff0c;以及处理通讯中的错误和数据解析。本文将详细说明实现步骤&#xff0c;包括配置、编程…

为什么选择CleanMyMac软件呢?推荐理由

你是否曾经遇到过这样的问题&#xff1a;电脑运行缓慢&#xff0c;存储空间不足&#xff0c;不知道如何清理垃圾文件&#xff1f;别担心&#xff0c;我们为你找到了解决方案——CleanMyMac软件。这款强大的工具可以帮助你轻松解决这些问题&#xff0c;让你的电脑焕然一新&#…

【vue-4】遍历数组或对象v-for

1、遍历数组 <ul><li v-for"(value,index) in web.number">index>{{index}}:value>{{value}}</li> </ul> 知识点&#xff1a; <ul>标签定义无序列表 举例&#xff1a; <ul><li>Coffee</li><li>Tea…

【Mac】Ulysses for Mac(优秀的markdown写作软件) v34.3中文版安装教程

软件介绍 哪款markdown写作软件最好用&#xff1f;小编推荐您使用尤利西斯&#xff1a;Ulysses mac版&#xff01;这是mac上一款优秀的markdown写作工具。Ulysses mac版具备全新的Soulmen写作坏境&#xff0c;采用了革命性的功能增强&#xff0c;结合了最好的部分最小标记&…

项目开发-若依框架

文章目录 框架下载及运行项目学习需求修改左侧菜单栏增加标签-项目信息搭建过程问题解决 后续需要看的内容 框架下载及运行 下载安装&#xff1a; https://blog.csdn.net/anxiaoxiao61/article/details/122505963 https://blog.csdn.net/m0_67376124/article/details/12761749…

ARTS Week 31

Algorithm 本周的算法题为 1556. 千位分隔数 给你一个整数 n&#xff0c;请你每隔三位添加点&#xff08;即 "." 符号&#xff09;作为千位分隔符&#xff0c;并将结果以字符串格式返回。 示例 1&#xff1a;输入&#xff1a;n 123456789输出&#xff1a;"123.…

D2Admin:企业中后台产品前端集成方案的探索与实践

D2Admin&#xff1a;企业中后台产品前端集成方案的探索与实践 摘要&#xff1a;随着企业信息化建设的不断深入&#xff0c;中后台管理系统的前端技术选型与集成方案成为了关键。D2Admin作为一款完全开源免费的前端集成方案&#xff0c;通过采用最新的前端技术栈&#xff0c;提…

基于jeecgboot-vue3的Flowable增加表单功能(二)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 接上一节 6、增加一个types.ts 类型 export interface FormForm {id: number | string | undefined;formName: string;formContent?: string;remark: string; } 7、api增加一个getForm…

AI大模型日报#0528:Greg专访 | 为什么OpenAI最先做出GPT-4、xAI获60亿美元融资、李飞飞经典对话Hinton

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff0…

Android USB调试模式下自动上下滑动(Go实现)

简介 有的时候要对手机UI界面进行滑动测试&#xff0c; 手动或许太消耗时间&#xff0c; 理由Android USB调试模式对UI进行上下滑动测试。 adb指令 使用adb --help 可以查看所有的adb支持指令, 但这里我们只需要上下, 使用到的指令&#xff1a; adb devices #列举所有设备 ad…