树与二叉树
树的定义及基本术语
树(Tree)是n(n>=0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T:
(1) 有且仅有一个称之为根的结点;
(2)除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身有是一颗树,并且称为根的子树。
基本术语
结点的度:一个结点的子树个数,称为此结点的度。
树的度:树中所有结点的度的最大值。
叶子结点(终端结点):度为0的结点。
分支结点(非终端结点):度不为0的结点。
孩子结点:结点的直接后继称为该结点的孩子结点。
双亲结点:结点的直接前驱称为该结点的双亲结点。
兄弟结点:同一双亲结点的孩子结点互称兄弟结点。
祖先结点:从根结点到该结点的路径上的所有结点。
子孙结点:以某结点为根的子树中任一结点称为该结点的子孙。
结点的层次:根结点的层次为1,根的直接后继层次为2,依此类推。
树的高度(深度): 树中所有结点层次的最大值。
有序树:如果各子树Ti之间是有先后次序的,则称为有序树。否则称为无序树 。
森林:m(m≥0)棵互不相交的树的集合。
二叉树
二叉树(Binary Tree)是n(n≥0)个结点所构成的集合,它或为空树(n = 0);或为非空树,对于非空树T:
(1) 有且仅有一个称之为根的结点;
(2) 除根结点以外的其余结点分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。
二叉树的性质:
性质1:二叉树第i层上的结点数目最多为2{i-1} (i≥1)。
性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
满二叉树:深度为k且有2k-1个结点的二叉树
(1)在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。
(2)满二叉树从根开始,按照从上到下、从左到右的顺序逐层进行编号(1, 2, …, n),如图所示。
完全二叉树:
深度为k 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k 的满二叉树中编号从1至n的结点一一对应
满二叉树与完全二叉树的区别:
满二叉树是叶子一个也不少的树,而完全二叉树虽然前n-1层是满的,但最底层却允许在右边缺少连续若干个结点。满二叉树是完全二叉树的一个特例。
满二叉树必为完全二叉树;完全二叉树不一定是满二叉树。
二叉树的顺序存储
用一组地址连续的存储单元,完全二叉树最适合这种存储结构。依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在数组的第i-1个位置。
特点:
结点间关系蕴含在其存储位置中
浪费空间,适于存满二叉树和完全二叉树
二叉树的链式存储
对于任意的二叉树来说,每个结点只有两个孩子、一个双亲。如果只存后继关系的话,可以设计每个结点包括三个域:数据域、左孩子域和右孩子域。
二叉树的链式存储表示:
一个含有n个结点的二叉链表必有n+1个空链域。