满二叉树:深度为k且有2k-1个节点的二叉树,这种树的特点是每一层上的节点数都是最大节点数
完全二叉树:深度为k,有n个节点的二叉树,叶子结点只在最大两层上出现,左子树深度与右子树深度相等或大1,当且仅当其每一个节点都与深度为k的满二叉树中从编号1至n的结点一一对应时,就是完全二叉树
深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
深度:树中节点的最大层次
祖先:是从根节点到该节点所经分支上的所有节点
终端节点:叶子
度:节点拥有的子树数称为节点的度,度为0的节点称为叶子,树的度是树内各节点的度的最大值
叶子节点数=度为2的节点数+1
已知二叉树有50个叶子结点,则该二叉树的总结点数至少是 99, 二叉树共有3类结点,即度为2的结点,度为1的结点和度为0的结点(叶子结点); 任何一个二叉树的叶子结点数总比度为2的结点数多一个;至少的情况就是该二叉树为满二叉树,及没有度为1的结点;
任一棵树中,结点总数=总分支数目+1
例如 .一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为 21。
解析 n0+4+3+2+1 = (n0*0 + 1*1 + 2*2 + 3*3 + 4*4)+1 则:n0=21 叶子结点就是21
线索二叉树
一个二叉树通过如下的方法“穿起来”:所有原本为空的右(孩子)指针改为指向该节点在中序序列中的后继,所有原本为空的左(孩子)指针改为指向该节点的中序序列的前驱。
如果有左空指针则将左空指针指向其前驱,如果有右空指针则将右空指针指向其后继。
lTag rTag是两个标签,当lTag或rTag为0时则lChild和rChild存的是它的左或右孩子,当lTag或rTag为1时lChild和rChild存的是它的前驱或后继
如图将下面的二叉树线索化
一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足(C)
A)所有的结点均无左孩子 B)所有的结点均无右孩子
C)只有一个叶子结点 D)是任意一棵二叉树
解析:先序序列是“根左右”,后序序列是“左右根”,若要这两个序列相反, 只有单支树,单支树的特点是只有一个叶子结点
从中序的规则可知树根在中间,树根的左边是左孩子,右边是右孩子;从后序可知树根为最后一个节点,先序第一个节点为根节点
一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )
A)250 B)500 C)505 D)以上答案都不对
【答案】D
【解析】若每个结点均已经编号,则最大的编号为1001,其父亲结点的编号为500,那么从501到1001均为叶子结点。因此,叶子结点数为1001-500=501。故答案为D。不要认为只有最后一层才是叶子节点
二叉链表存储结构
通过改造二叉树的存储结构来存一般的树,对于一般的树,父节点不一定要直接指向每一个孩子节点,也就是如图的转换,父节点的左指针指向其第一个孩子,第一个孩子的右指针指向它的兄弟节点,依次类推下去。
如图是其存储结构
利用二叉链表存储树时,根结点的右指针是( )
A)指向最左孩子 B)指向最右孩子 C)空 D)非空
【答案】C
【解析】利用二叉链表存储树时,即用孩子兄弟链表存储树,根结点的左指针指向其第一子女,根结点的右指针指向其下一兄弟,所以为空。