代码随想录-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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值