二叉树基本概念

二叉树

简单概念:根节点、子树、叶子节点

image

父节点、兄弟节点、孩子节点(左孩子、右孩子)

满二叉树:一个二叉树所有【非叶子节点】都存在左孩子和右孩子,且所有叶子节点处于同一层级上。

完全二叉树:把满二叉树右边几个(≥0)叶子拿掉,形成的二叉树就是完全二叉树。可以看出,满二叉树也是完全二叉树。

如何存储?

  1. 链式存储结构(链表)
  2. 数组:若父节点下标是p(从0开始),则其左孩子下标是2p+1,右孩子下标是2p+2

image-20220316224642839

二叉树应用

二叉查找树:在二叉树基础上增加条件:

  1. 若左子树不为空,则左子树节点的值均小于根节点的值;
  2. 若右子树不为空,则右子树节点的值均大于根节点的值;
  3. 左子树、右子树也是二叉查找树

这种查找方式类似二分法,查找的时间复杂度 O(logn),常用于排序(也叫二叉排序树)

二叉树的遍历

前序遍历、中序遍历、后序遍历、层序遍历 (前3种属于:深度优先遍历;后1种属于:广度优先遍历)

前序遍历:根节点->左子树->右子树

image-20220316231151688

中序遍历:左子树->根节点->右子树

image-20220316231033211

后序遍历:左子树->右子树->根节点

image-20220316230934453

二叉堆

二叉堆本质上是一种完全二叉树,其根节点叫”堆顶“

  • 最大堆:任何一个父节点的值,都>=它左孩子或右孩子的值
  • 最小堆:任何一个父节点的值,都<=它左孩子或右孩子的值

二叉堆的自我调整:

  1. 插入节点:从堆的最后一个位置插入,再调整位置
  2. 删除节点:把堆的最后一个节点调整到被删除的节点的位置,再调整位置
  3. 构建二叉堆:将无序的完全二叉树调整为二叉堆,通过”上浮“或”下沉“操作

优先队列

特点:不遵循FIFO原则,分为以下情况

  1. 最大优先队列:总是队列中最大元素优先出队(通过最大堆实现,每次堆顶出队)
  2. 最小优先队列:总是队列中最小元素优先出队(最小堆)
posted @ 2022-03-16 23:34  aJream  阅读(144)  评论(0编辑  收藏  举报