【数据结构】二叉树的定义

定义

二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点的两棵互不相交的,分别称为根结点的左子树和右子树的二叉树组成。
图1-1就是一个二叉树。
在这里插入图片描述

图1-1

特点

  1. 每个结点最多有两个子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一颗子树都是可以的。
  2. 左子树和右子树是有顺序的,次序不能任意颠倒。打个比方,人的双手,双脚,显然左手和右手是不一样的。
  3. 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。图1-2中,树1和树2是同一棵树,但他们却是不同的二叉树。
    在这里插入图片描述
图1-2

二叉树具有五种基本形态:

  1. 空二叉树。
  2. 只有一个根结点。
  3. 根结点只有左子树。
  4. 根结点只有右子树。
  5. 根结点既有左子树又有右子树。

这五种形态还是比较好理解的,如果是有三个结点的树,有几种形态?如果是有三个结点的二叉树,有几种形态?
若只考虑形态,三个结点的树只有两种情况。那就是图1-3中只有两层的树1和有三层的后四种的任意一种,但是对于二叉树,由于要区分左右,所以就要演变成五种形态,树2,树3,树4,树5分别代表不同的二叉树。
在这里插入图片描述

图1-3

特殊二叉树

斜树

顾名思义,斜树一定要是斜的,但是往哪斜是有讲究的。所有的结点都只有左子树的二叉树叫做左斜树。所有的结点都是只有右子树的二叉树叫右斜树。这两种统称为斜树。 图1-3中的树2就是左斜树,树5就是右斜树。斜树有一个明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。

满二叉树

在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树。
图1-4就是一颗满二叉树。
在这里插入图片描述

图1-4

单是每个结点都存在左右子树,不能算是满二叉树,还必须要所有 的叶子结点都在同一层上,这就做到了整棵树的平衡,因此,满二叉树的特点:
(1)叶子只能出现在最下一层。出现在其它层就不可能达到平衡。
(2)非叶子结点的度一定是2。
(3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

完全二叉树

对一颗具有n个结点的二叉树按层次编号,如果编号为i(1=<i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树,如图1-5所示。

在这里插入图片描述

图1-5

这是一颗有些难理解的二叉树。
首先要从字面上区分,“完全”和“满”的差异,满二叉树一定是一颗完全二叉树,但是完全二叉树不一定是满二叉树。
完全二叉树的所有结点与同样深度的满二叉树,它们 按层序编号相同的结点,是一 一对应的,怎么理解按层序编号,图1-6中数1,因为5结点没有左子树,却有右子树,那就使得按层序编号的第10个编号空挡了。图2,,由于3结点没有子树,所以使得6,7编号的位置空挡了,树3又是因为没有5编号没有子树造成10和11编号位置空挡。
图1-5尽管他不是满二叉树,但是编号是连续的,所以他是完全二叉树。
在这里插入图片描述完全二叉树的特点: (1)叶子结点只能出现在最下两层。 (2)最下层的叶子一定集中在最左部连续位置。 (3)倒数二层,若有叶子结点,一定都在右部连续位置。 (4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况 (5)同样结点数的二叉树,完全二叉树的深度最小。