二叉树超详细定义


前言

满二叉树:就是很饱满,在不能增加深度的情况下,已经不能添加结点。

完全二叉树:你就想最后层的节点都要左靠,上面的每一层都是满的,满二叉树就是特殊的完全二叉树。

平衡二叉树:树的左右子树的高度差不超过1,这样感觉这棵树很平衡,不会偏向左或右。

二叉搜索树:搜索树就是必须要有数值,左(右)子树上所有结点的值均小(大)于它的根结点的值。

平衡二叉搜索树:就是平衡二叉树和二叉搜索树的结合。


一、满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。简单就是说满二叉树很饱满,没有分支。

这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。

二、完全二叉树

完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点。

为什么这样定义

完全二叉树的定义之所以如此,是基于以下几个原因:

  1. 完全二叉树的定义考虑了节点的连续性和紧凑性。除了最后一层,其它层的节点都是从左到右连续排列的,没有空缺的位置,这样可以充分利用存储空间,减少了存储的浪费。

  2. 完全二叉树的定义使得其在存储和操作上更加高效。由于节点的连续性,可以使用数组来存储完全二叉树,不需要使用指针等额外的数据结构。同时,完全二叉树的定义也方便了基于索引的操作,例如根据索引快速计算出节点的父节点、左子节点和右子节点。

  3. 完全二叉树的定义使得其在一些算法和数据结构中的应用更加方便。例如,完全二叉树常用于堆(Heap)的实现,堆是一种常见的用于高效获取最大或最小元素的数据结构,而完全二叉树的特性可以使堆的操作更加简单和高效。

三、平衡二叉搜索树

1.首先来说二叉搜索树

前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树
  • 下面这两棵树都是搜索树


2.平衡二叉搜索树

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。

猜你喜欢

转载自blog.csdn.net/m0_62363630/article/details/130689447