树
定义:
树是n(n≥0)个结点的 有限集合T。当 n=0时,称为 空树;当n>0时,该集合满足如下条件:
(1) 其中必有一个称为根(root)的特定结点,它 没有直接前驱,但有零个或多个直接后继。
(2) 其余n-1个结点可以划分成m(m≥0)个 互不相交的有限集T1,T2,T3,…,Tm,其中Ti又是一棵树,称为根root的子树。每棵子树的根结点 有且仅有一个直接前驱,但有零个或多个直接后继。
这是一个递归的定义,树里面还有子树,树型结构是一个一对多的结构。
基本术语:
结点的度(Degree):结点拥有的子树数量; D的度为3
叶子(Left)/终端结点:度为0的结点;KLFGMIJ
分支结点/非终端接结点:度不为0的结点;
树的度:树内各结点的度的最大值;3
孩子(Child):结点的子树的根为该结点的孩子(结点的直接后驱);BCD是A的孩子
双亲结点(Parent):一个结点的直接前驱; A是BCD的双亲
兄弟结点(Sibling):同一个双亲的孩子之间互称; BCD
堂兄弟:其双亲在同一层的结点; KM
祖先:从根到该结点所经分支上的所有结点; E的祖先为AB
子孙:以某结点为根的子树中的任一结点; B的子孙为EK
层次:从根开始定义,根为第一层,根的孩子为第二层。(也可以把根看成第0层)
深度:根的深度为0,其他结点深度为从根到此结点的唯一路径长。
森林:m(m>=0)棵互不相交的树的集合
无序树/自由树:树中任意结点的子结点之间没有顺序关系。反之为有序树。
二叉树
定义:
我们把满足以下两个条件的树形结构叫做二叉树(Binary Tree):
(1)每个结点的度都不大于2;
(2)每个结点的孩子结点次序不能任意颠倒。
一个二叉树中的每个结点只能含有0、1或2个孩子,而且每个孩子有左右之分。位于左边的孩子叫做左孩子,位于右边的孩子叫做右孩子。
性质:
若二叉树的层次从0开始,则在二叉树的第i层最多有2^i个结点
高度为k的二叉树最多有2^(k+1)-1个结点。(k>=-1)
若二叉树叶结点的个数为n0,度为2的结点个数为n2,则n0 = n2+1;
满二叉树:每一层的结点都达到最大个数,若每层从右向左依次缺省,就为完全二叉树
具有n个结点的完全二叉树的高度为|log(n+1)|-1,向上取整
二叉树的存储
顺序存储
数组存放树都是存放的完全二叉树,当有空时也必须存东西,可以用其他符号表示空,因为数组存放的是一个逻辑关系。
链式存储
静态结构
数据+关系