树的定义和基本术语
?树:是一类重要的非线性数据结构,是以分支关系定义的层次结构。
?根:树(tree)是n(n>=0)个结点的有限集T,对于非空树,其中有且仅有一个特定的结点,称为树的根(root)。
?子树:当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)。每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。
结点:包含一个数据元素及若干指向子树的分支。
结点的度:结点子树的个数。
树的度: 树中最大的结点度。
叶子结点:也叫终端结点,是度为 0 的结点。
分枝结点:度不为0的结点。
从根到结点的路径:由从根到该结点所经分支和结点构成。
孩子结点:结点的子树的根称为该结点的孩子。
双亲结点:B结点是A结点的孩子,则A结点是B结点的双亲。
兄弟结点:同一双亲的孩子结点。
堂兄结点:同一层上结点。
祖先结点: 从根到该结点的所经分支上的所有结点子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙。
结点的层次:根结点的层定义为1;根的孩子为第二层结点,依此类推。
树的深度:树中最大的结点层。
有序树:子树有序的树。
无序树:不考虑子树的顺序。
森林: m(m>=0)棵互不相交的树的集合。
线性结构:第一个数据元素(无前驱),最后一个数据元素(无后继),其它数据元素(一个前驱,一个后继)
树:根结点(无前驱),多个叶结点(无后继),树中其它结点(一个前驱,多个后继)
二叉树
定义:二叉树是n(n30)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成。
特点:
1.每个结点至多有二棵子树(即不存在度大于2的结点);
2.二叉树的子树有左、右之分,且其次序不能任意颠倒。
二叉树的五种基本形态
(1)满二叉树
一棵深度为k的且有 个结点的二叉树叫满二叉树。
特点:每一层上的结点数都是最大结点数。
(2)完全二叉树
深度为k,有n个结点的二叉树当且仅当其每一个 结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树。
特点:叶子结点只可能在层次最大的两层上出现。 对任一结点,若其右分支下子孙的最大层次为L,则其左分支下子孙的最大层次必为L或L+1。
二叉树具有以下重要性质:
性质1 二叉树第i层上的结点数目最多为2i-1(i≥1)。
证明:用数学归纳法证明:
归纳基础:i=1时,有2i-1=20=1。因为第1层上只有一个根结点,所以命题成立。
归纳假设:假设对所有的j(1≤j<i)命题成立,即第j层上至多有2j-1个结点,证明j=i时命题亦成立。
归纳步骤:根据归纳假设,第i-1层上至多有2i-2个结点。由于二叉树的每个结点至多有两个孩子,故第i层上的结点数至多是第i-1层上的最大结点数的2倍。即j=i时,该层上至多有2×2i-2=2i-1个结点,故命题成立。
性质2 深度为k的二叉树至多有2k-1个结点(k≥1)。
证明:在具有相同深度的二叉树中,仅当每一层都含有最大结点数时,其树中结点数最多。因此利用性质1可得,深度为k的二叉树的结点数至多为:
20+21+…+2k-1=2k-1
故命题正确。
性质3 在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1。
证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)应等于0度结点数、1度结点(记为n1)和2度结点数之和:
n=no+n1+n2 (式子1)
另一方面,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:
nl+2n2
树中只有根结点不是任何结点的孩子,故二叉树中的结点总数又可表示为:
n=n1+2n2+1 (式子2)
由式子1和式子2得到:
no=n2+1