二叉树详解

35 阅读3分钟

树的介绍

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。

树的每个元素我们叫做“节点”,用来连接相邻节点之间的关系,我们叫做 “父子关系”

父节点是同一个节点的节点,它们之间互称为兄弟节点

把没有父节点的节点叫做根节点

把没有子节点的节点叫做叶子节点或者叶节点

树.webp

树的特点

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且仅有一个父节点;
  • 除了根节点以外,每个子节点可以分为多个不相交的子树。

树的基本术语

  • 节点的度:一个节点含有的子树的个数,叫做该节点的度。
  • 叶节点和终端节点:度为零的节点。
  • 兄弟节点:拥有相同父节点的节点称为兄弟节点。
  • 树的度:一棵树中最大的节点的度称为树的度。
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。
  • 树的高度或深度:树中节点的最大层次。
  • 祖先:从根到该节点所经分支上的所有节点。
  • 森林:由m(m>0)棵互不相交的树的集合称为森林。

注意:

深度定义是从上往下的,高度定义是从下往上的。

深度和高度涉及到结点的层数,有的教材规定根结点在第0层,有的则规定根结点在第1层。

树从根结点开始往下数,叶子结点所在的最大层数称为 树的深度

有的教材对于树的高度定义是高度就是深度(层数是0123,深度=高度=3;层数是1234,深度=高度=4);而有的教材树的高度则是看一共有几层。也就是说不论根节点在第几层,树的深度都是和最大层的叶子节点一样。而树的高度只要看有几层就行了(0123是四层,1234也是四层)。

二叉树的介绍

  • 二叉树就是度不超过2的树,其每个结点最多有两个子结点;
  • 二叉树的结点分为左结点和右结点。

二叉树的种类

满二叉树

满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
满二叉树的特点有:

  • 叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
  • 非叶子结点的度一定是2。
  • 在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。

满二叉树.jpg

完全二叉树

如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树

二叉查找树

二叉查找树,也称二叉搜索树,或二叉排序树。要么是一棵空树,要么就是具有如下性质的二叉树:

  • 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 任意节点的左、右子树也分别为二叉查找树;
  • 没有键值相等的节点。

二叉树的存储方式

顺序存储

链式存储

静态存储

二叉树的遍历方式

前序遍历

中序遍历

后续遍历

二叉树的实现