Java数据结构与算法(树)——基本概念(二叉树)

一、树的定义及概念

树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由 n(n >= 0)个有限节点通过连接它们的边组成一个具有层次关系的集合。n = 0 时称为空树。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。下图为一棵“树”结构:
在这里插入图片描述

节点 ——图中的圆圈,比如 A,B,C 等都表示节点。节点一般代表一些实体,在 Java 面向对象编程中,节点一般代表对象

——连接节点的线称为边,边表示节点间的关联关系。一般从一个节点到另一个节点的唯一方法就是沿着一条顺着有边的道路前进。在 Java 当中一般代表引用

注意:一个树的根节点是唯一的;子树的个数没有限制,但它们一定互不相交。

1、节点的分类

节点拥有的子树数称为节点的度(degree)。度为零的节点称为叶节点或终端节点;度不为零的节点称为非终端节点。树的度是树内各个节点的度的最大值。

如上图的树中,B 节点的度为 2,D 节点的度为 1;所有节点最多有两个子树,所以这棵树的度为 2。

2、节点间的关系

节点的子树的根称为该节点的孩子,该节点称为孩子的双亲,同一个双亲的孩子之间互称兄弟

如上图的树中,G 是 C 的孩子,C 是 G 的双亲,F 和 G 互称兄弟。

3、层次

节点的层次(level) 从根开始定义起,根为第一层,根的孩子为第二层…… 其双亲在同一层的节点互为堂兄弟。树中节点的最大层次称为树的深度(或高度)

如上图的树中,F 的层次为 3,树的层次为 4;D、E 和 F、G 互为堂兄弟。

4、有序树和无序树

如果将树中节点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树

5、森林

森林(Forest)是 m(m >= 0)棵互不相交的树的集合。对树中每个节点而言,其子树的集合即为森林。

树中最常用的是二叉树。

二、二叉树

1、定义

每个节点最多有两个子节点的树称为二叉树

2、二叉树的特点

  • 每个节点最多有两个子树(注意:是最多有,而不是只有);
  • 左子树和右子树是有次序的,不能任意颠倒;
  • 即使某个节点只有一个子树,也要区分是左子树还是右子树。

3、二叉树的五种基本形态

  • 空二叉树;
  • 只有一个根节点;
  • 根节点只有左子树;
  • 根节点只有右子树;
  • 根节点既有左子树又有右子树。

4、特殊二叉树

(1)斜树

  • 左斜树——所有的结点都只有左子树的二叉树;
  • 右斜树——所有的结点都只有右子树的二叉树。

(2)满二叉树——所有叶子在同一层上

在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有的叶子都在同一层上,这样的二叉树称为满二叉树。如下图:
在这里插入图片描述
注意:

  • 单是每个节点都存在左右子树,不能算是满二叉树,还必须要所有的叶子在同一层上;
  • 叶子只能出现在最下面一层;
  • 非叶子节点的度一定是 2。

(3)完全二叉树

对于一棵具有 n 个节点的二叉树按层序编号,如果编号为 i 的节点与同样深度的满二叉树中编号为 i 的节点在二叉树中的位置完全相同,则这棵树称为完全二叉树。(通过观察二叉树的示意图,给每个节点按满二叉树的结构逐层顺序编号,如果编号出现空档,就不是完全二叉树,否则就是完全二叉树)。如下图:
在这里插入图片描述
注意:

完全二叉树是根据满二叉树定义的,要特别注意两者的差别。

5、二叉树的性质

  • 在二叉树的第 i 层上至多有 2 i 1 2^{i - 1} 个结点;
  • 深度为 k 的二叉树至多有 2 k 1 2^k - 1 个节点。

三、二叉树的存储结构

1、二叉树的顺序存储结构(用数组表示)

用一维数组存储二叉树中的节点,下标为 0 的节点是根,下标为 1 的节点是根的左子节点,下标为 2 的节点是根的右子节点,以此类推……

树中的每个位置,无论是否存在节点,都对应于数组中的一个位置,树中没有节点的在数组中用 0 或 null 表示。假设某节点的索引为 index,那么它的左子节点的索引为 2 * index+1,它的右子节点的索引为 2 * index+2,它的父节点的索引为 (index-1)/2。

2、二叉树的链式存储结构(二叉链表)

二叉树每个节点最多有两个孩子,所以为它设计一个数据域和两个指针域,这样的链表称为二叉链表。其中 data 为数据域,lChild 和 rChild 都是指针域, 分别存放指向左孩子和右孩子的指针。如下图:
在这里插入图片描述
如果有需要,还可以再增加一个指向其双亲的指针域,即为三叉链表

发布了56 篇原创文章 · 获赞 0 · 访问量 949

猜你喜欢

转载自blog.csdn.net/weixin_45594025/article/details/104449308