代码随想录-14|二叉树理论基础

Before Writing

博主转Java了
参考代码随想录二叉树,希望有所坚持有所收获吧。


对于二叉树我们应该有几个概念:

  • 如果有数值和无数值二叉树应该怎么分类
  • 对于二叉树遍历有几种方式
  • 对于二叉树的存储有几种方式
  • 对于二叉树为什么要用递归(左右子树都应满足这个树的性质)

1-二叉树的种类

1-1满二叉树

  • 所有根节点都满了,只有度为0和度为2的节点,也就是说对于深度为 k k k满二叉树,它一共有 2 k − 1 2^k - 1 2k1个节点(指数求和公式 s u m = 1 − 2 k 1 − 2 sum = \frac{1 - 2^k}{1-2} sum=1212k).

  • 请画一下满二叉树的图

在这里插入图片描述

1-2完全二叉树

  • 只有最底层的叶子结点没有填满,除底层外上面可以看做满二叉树。
  • 最底层的的叶子结点只能从左到右一次填充。
  • 最多有两层(最底)包含叶子节点。
  • 左右子树也是完全二叉树
    在这里插入图片描述

1-3二叉搜索树

  • 二叉搜索树是一个有序树,它有数值。
  • 如果左子树不为空,则左子树节点的数值都小于它的根节点数值。
  • 如果右子树不为空,则右子树节点的数值都大于它的根节点数值。
  • 左右子树也都为二叉排序树

在这里插入图片描述

1-4平衡二叉搜素树

  • 平衡二叉搜索树在二叉搜索树上加了一个限定条件,它的左右子树高度相差不超过一。
  • 并且左右子树也是平衡二叉搜索树
    在这里插入图片描述

2- 二叉树的存储方式

  • 二叉树可以链式存储也可以顺序存储。
  • 链式存储用指针,顺序存储用数组。
    • 关于链式存储:我们只用指定左右指针即可
    • 关于顺序存储:我们索引的方式是,左孩子和右孩子分别为当前节点ii * 2 + 1i * 2 + 2

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

3-二叉树的遍历方式

关于二叉树我们分为深度优先遍历和广度优先遍历:

  • 深度优先:前序,中序,后序。
  • 广度优先:层次遍历。
  • 我们通常使用递归的形式进行深度遍历,而广度优先搜索使用队列的形式。
    在这里插入图片描述

4-关于java容器

  • java容器分为Collection和Map
  • 其中Collection分为:
    • List: ArrayList, LinkedList, Vector, Stack
    • Set: HashSet, LinkedHashSet, TreeSet
  • 其中Map分为:
    • HashMap: LinkedHashMap
    • TreeMap
    • ConcurrentHashMap
    • Hashtable

在这里插入图片描述

4-1 Collection和Map的区别

Collection:存放独立的元素
Map:存放键值对

4-2 List和Set的区别

List是可重复集合,Set是不可重复集合,这两个接口都实现了Conllection父类接口。

但是,Map并没有继承Conllection,他是一个独立的接口,Map是一种把键对象和值对象进行映射的集合,他的每一个元素都包含了一对键对象和值对象,Map中存储的数据是没有顺序的,它的key是不能重复的,他得值是可以有重复的。

4-4 List的实现

  • ArrayList和Vector内部是线性动态数组结构,所以查询效率上会高很多,Vector是线程安全的,相比ArrayList线程是不安全的,所以性能会稍慢一些。
  • LinkedList:是双向链表的数据结构存储数据,在做查询时会按照序号索引数据进行前向和后向遍历,查询效率偏低,但插入数据时只需要记录本项的前后项即可,所以插入速度较快。

4-5 Set的实现

  • HashSet:它的内部是哈希表(实际上是一个HashMap实例)支持的。但他不保证set元素的迭代顺序。
  • TreeSet:TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。

4-6 Map的实现

  • Map接口有三个实现类:Hashtable,HashMap,TreeMap,LinkedHashMap
  • Hashtable:内部存储的键值对是无序的,是按照哈希算法进行排序,与HashMap最大的区别就是线程安全。键或者值不能为null,为null就会抛出空指针异常。
  • TreeMap:基于红黑树(red-black tree)数据结构实现,按key排序,默认的排序方式升序。
  • LinkedHashMap:有序的Map集合实现类,相当于一个栈,先put进去的最后出来,先进后出。

4-7 List和Map区别

  • 一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复,Map中存储的数据是没有顺序的,其key是不能重复的,他得值是可以有重复的。

Let’s Code

public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;TreeNode() {};TreeNode(int val) {this.val = val;}TreeNode(int val, TreeNode right, TreeNode left) {this.val = val;this.left = left;this.right = right;}
}

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

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

相关文章

STM32F103C8T6第4天:串口实验(非中断和中断)、hc01蓝牙、esp8266WIFI、4g

1. 串口基本介绍(332.36) 常用函数介绍 串口发送/接收函数: HAL_UART_Transmit(); 串口发送数据,使用超时管理机制HAL_UART_Receive(); 串口接收数据,使用超时管理机制HAL_UART_Transmit_IT(); 串口中断模式发送HAL…

【ONE·C++ || 网络基础(三)】

总言 主要内容:HTTP和HTTPS工作方式简述。 文章目录 总言6、HTTP协议(应用层二)6.1、入门认识6.1.1、认识URL6.1.2、urlencode和urldecode 6.2、快速构建6.2.1、快速构建http请求和响应的报文格式6.2.2、http demo6.2.2.1、sock.hpp &&a…

Springboot项目中打印SQL语句日志

在项目中我想查看自己的SQL语句是什么,就是如下图的内容: 方法一:(我常用的) 可以在项目中的.yml配置文件中添加如下内容: logging:level:com.uyun.bankbranchalert.mapper: debug其中com.uyun.bankbran…

Mysql数据库 14.SQL语言 视图

一、视图的概念 视图:就是由数据库中一张或多张表根据特定的条件查询出的数据狗造成的虚拟表 二、视图的作用 安全性,简单性 三、视图的语法 语法 create view 视图表 as select_statement; 代码实现 #创建视图 将查询结果创建称为视图&#x…

vue项目使用electron打包exe桌面程序

首先在vue项目中cmd进入终端,然后第一次下载electron依赖需要切换镜像,否则下载得很慢很慢,在终端中输入以下两个命令 将 Electron Builder Binaries 的镜像源设置为淘宝的 npm 镜像源。这同样用于提升 Electron Builder 相关包的下载速度。 …

msvcr110.dll文件修复方法分享,如何解决缺失的msvcr110.dll

我们可能会遇到一些软件或游戏在启动时提示msvcr110.dll文件丢失的情况,这种问题在运行Windows操作系统的计算机中并不罕见。了解如何修复这个问题将会对我们确保应用程序的正常运行有重要的帮助。 一.msvcr110.dll是什么 msvcr110.dll是微软Visual C 2012 Redistr…

高浓度白酒废水处理需要哪些设备

高浓度白酒废水处理需要的设备包括预处理设备、生物反应器、二级处理设备、消毒装置等。 预处理设备:包括格栅、筛网等,用于去除污水中的大颗粒物和杂质。生物反应器:用于进行生物反应,去除污水中的有机物和氨氮等污染物。二级处…

【银行测试】支付功能、支付平台、支持渠道如何测试?

有朋友提问:作为一个支付平台,接入了快钱、易宝或直连银行等多家的渠道,内在的产品流程是自己的。业内有什么比较好的测试办法,来测试各渠道及其支持的银行通道呢? 作为产品,我自己办了十几张银行卡方便测…

新版本!飞凌嵌入式RK3568系列开发板全面支持Debian 11系统

飞凌嵌入式OK3568-C/OK3568J-C开发板现已全面支持Debian 11系统,新系统的加持能为用户提供主控新选择,并为开发者带来更多开发便利! Debian系统作为一种广受欢迎和信赖的开源操作系统,以其稳定性、可靠性和开放性而闻名&#xff0…

嵌入式Linux开发,NFS文件系统挂载

在嵌入式linix的开发中,经常会需要在pc端和板端互相传输文件,优先可选择ftp传输,但是有些嵌入式板端不支持,只能使用nfs这种方式,即pc端作为服务端,板端作为客户端,将pc端的某个文件夹挂载到板端…

蓝桥杯 string

string简介 string是C标准库的重要组成部分&#xff0c;主要用于字符串处理。 使用string库需要在头文件中包括该库 #include< string> string与char[]不同&#xff0c;string实现了高度的封装&#xff0c;可以很方便地完 成各种字符串的操作&#xff0c;比如拼接、截取…

Redis的发布和订阅

Redis发布订阅(pub/sub)是一种消息通信模式&#xff1a;发送者(pub)发送消息&#xff0c;订阅者(sub)接收消息。 Redis客户端可以订阅任意数量的频道。 举例说明&#xff0c;我们创建两个Redis客户端&#xff1a; 客户端1订阅channel1频道&#xff1a; 客户端2给channel1发送消…