一、树的基本知识
定义:
树是由n(n>=0)个结点组成的有限集合(n=0时称作空树),包含一个根结点和零或若干棵互不相干的子树。
非空树有以下几个特点:
-
有且仅有一个根节点
-
没有后继的节点称为“叶子节点”,有后继的节点称为“分子节点”
-
当树的结点数n>1时,根结点之外的其他结点可以分为m(m>=1)个互不相交的集合T1,T2,T3.。。。Tm,其中每个集合Ti(1<=i<=m)具有与树T相同的树结构,称为子树。每颗子树的根结点有且仅有一个直接的前驱结点。
术语:
结点:树的数据元素
结点的度:结点挂接的子树数
结点的层次:从根节点到该结点的层数
路径:顺着连接节点的边从一个节点到另一个节点,所经历的节点顺序
根节点:树最上面的节点称为根节点,一棵树只有一个根节点,而且根到任何一个节点有且只有一条路径
父节点:每个节点都有一条边向上连接到另一个节点,这个节点就称是下面的节点的父节点
子节点:每个节点都有一条边向下连接到另一个节点,下面的节点称为该节点的子节点
叶子节点:没有子节点的节点称为叶子节点
子树:每个节点都可以作为一个子树的根,它和它所有的子节点,子节点的节点组合起来就是一个子树
树的层次:树有几层就有几个层次
树的深度:根节点的最大层次
二、二叉树
定义:
二叉树是n个结点的有限集合,n=0时该集合为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
特点:
- 每个节点最多2课子树,即二叉树不存在度数大于2的节点
- 它是有序树、左子树、右子树是顺序的,不能交换次序
- 即使某一个节点只有一颗子树,也要确定它是左子树还是右子树
五种基本形式:
- 空二叉树
- 只有一个根节点
- 根节点只有左子树
- 根节点只有右子树
- 根节点有左子树和右子树
特殊的二叉树:
- 斜树:左斜树和右斜树
- 满二叉树
- 完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i (1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
二叉树性质:
- 在二叉树的第i层上最多有 个结点(i>=1)
- 深度为k的二叉树至多有个结点
-
对于一个完全二叉树,假设它有n个结点,对结点进行从1开始编号,对任一结点i满足下面
a,它的双亲是结点 i/2 (除了i=1的情况)
b,左孩子是 2i 右孩子是 2i+1
c,如果2i>n 说明无左孩子 2i+1>n 说明无右孩子
二叉树存储结构:
一般的树来说是一对多的关系,使用顺序结构存储起来比较困难,但是二叉树是一种特殊的树,每个结点最多有两个子节点,并且子节点有左右之分,并且兄弟,父亲,孩子可以很方便的通过编号得到,所以我们使用顺序存储结构使用二叉树的存储。
顺序存储一般只用于完全二叉树
二叉树链表存储:二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表为二叉链表。