树和二叉树
一、树
- 常见的数据结构
(1)集合
集合的定义是由一组无序且唯一(即不能重复)的项组成的。不包含任何元素的集合就叫做空集。
(2)线性结构
线性结构是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串,……
(3)树形结构
n个有限节点组成一个具有层次关系的集合。
(4)图形结构
图形结构——多个对多个。
- 树的定义
树是一种数据结构,它是由n(n >= 0)个有限节点组成一个具有层次关系的集合。树是一类非线性结构。这种结构结点之间有分支,并具有层次关系。它非常类似于自然界中的树。
树的作用:表达家谱顺序、行政组织结构、计算机文件结构、书的教材章节结构等。
- 树的基本概念
(1)树是n(n ≥ 0)个结点的有限集。
(2)当n = 0时称为空树。
(3)当n > 0时为非空树,在任意一棵非空树中,有且仅有一个称为根的结点,其余的结点可分为m(m ≥ 0)个互不相交的有限集T1,T2,……,Tm,其中每一个集合又称为一棵树,并且称为根的子树;同理,每一棵子树又可以分为若干个互不相交的有限集……
总结树的特性:
(1)空树是树的特例;
(2)非空树中至少有一个结点,称为树的根,只有根结点的树称为最小树;
(3)在含有多个结点的树中,除根结点外,其余结点构成若干棵子树,且各子树间互不相交。
- 树的基本术语
| 术语 | 定义 |
|---|---|
| 树的结点 | 包含一个数据元素及若干个指向其子树的分支 |
| 结点的度 | 一个结点拥有的子树数目 |
| 树的度 | 一棵树上所有结点度的最大值 |
| 叶子结点(终端结点) | 度为零的结点 |
| 分支结点(非终端结点) | 度大于零的结点 |
| 路径(从根到结点的) | 由从根到该结点所经分支和结点构成 |
| 孩子结点 | 结点的子树的根称为该结点的孩子结点 |
| 双亲结点 | 相应地,该结点称为孩子的双亲结点 |
| 兄弟 | 具有同一父结点的子结点互称兄弟 |
| 堂兄弟 | 其双亲在同一层的结点互为堂兄弟 |
| 祖先结点 | 从根到该结点所经分支上的所有结点 |
| 子孙结点 | 以某结点为根的子树中任一结点都称为该结点的子孙 |
| 结点的层次 | 从根结点到该结点所经过的路径长度加1 |
| 树的深度 | 树中叶子结点具有的最大层次数 |
| 树的宽度 | 整棵树中某一层中最多的结点数称为树的宽度 |
| 有序树 | 如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,与之相对的是无序树 |
| 第一个孩子 | 在有序树中,最左边的子树的根称为第一个孩子 |
| 最后一个孩子 | 在有序树中,最右边的子树的根称为最后一个孩子 |
二、二叉树
- 二叉树的定义
二叉树是n(n ≥ 0)个结点的有限集合,这个集合或是空集,或是由一个根结点以及两棵互不相交的、被称为根的左子树和右子树所组成;左子树和右子树分别又是一棵二叉树。
二叉树的特点:每个结点至多只有两棵子树,且二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树和树的不同:
(1)树中结点的最大度数没有限制,而二叉树结点的最大度数为2。
(2)树的结点无左、右之分,而二叉树的结点有左右之分。
- 满二叉树和完全二叉树
满二叉树:一棵深度为k且有2^k-1个结点的二叉树。(特点:每一层上的结点数都是最大结点数)
完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。(特点:至多只有最下面两层的结点的度可以小于2,且倒二层如果只有一个孩子,那必是左孩子。)
- 二叉树的性质
(1)在二叉树的第i层上至多有2ⁱ⁻¹个结点(i ≥ 1)
(2)深度为k的二叉树至多有2^k-1个结点(k ≥ 1)
(3)对任何一棵二叉树,如果其叶结点数n₀,度为2的结点数为n₂,则一定满足:n₀=n₂+1
(4)具有n个结点的完全二叉树的深度为floor(log₂n)+1
(5)对于一棵n个结点的完全二叉树,对任一个结点(编号为m):
如果m = 1,则结点m为根,无父结点;如果m > 1,则其父结点编号为floor(i / 2)
如果2m > n,则结点m无子节点,即结点m为叶结点;否则左孩子编号为2m
如果2m + 1> n,则结点m无右孩子,否则右孩子编号为2m + 1
- 二叉树的遍历
一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
(1)访问根结点(D);
(2)遍历该结点的左子树(L);
(3)遍历该结点的右子树(R);
遍历方案:
DLR:先序遍历(Preorder Traverse,亦称前序遍历)
———访问根结点、遍历左树、遍历右树。
LDR:中历(Inorder Traverse)
———遍历左树、访问根结点、遍历右树。
LRD:后历(Postorder Traverse)
———遍历左树、遍历右树、访问根结点。
先序遍历的结果为:ABGDEHICF
中序遍历的结果为:GDBHEIAFC
后序遍历的结果为:GDHIEBFCA
结论:若二叉树中各结点的值均不相同,则:由二叉树的前序序列和中序序列,或由其 其后序序列和中序序列均能唯一地确定一棵二叉树,但由前序序列和后序序列却不一定能唯一地确定一棵二叉树。

浙公网安备 33010602011771号