【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)

目录

一、二叉树的概念

二、特殊的二叉树

三、结点数与深度

总结

 


一、二叉树的概念

        一棵二叉树是结点的一个有限集合,该集合由一个根节点和两棵别称左子树、右子树的二叉树组成。

【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)_第1张图片

         如上图所见:

        1.二叉树不存在度大于2的结点。

        2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。

二、特殊的二叉树

        1.满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树,也就是说,如果一个二叉树的层数为k,且结点总数是2^k-1,则它就是满二叉树。

                                  【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)_第2张图片

         2.完全二叉树:对于深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称为完全二叉树。也就是结点的数据要连续不可间断。

        以下两种是完全二叉树:

【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)_第3张图片【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)_第4张图片

        以下一种不属于完全二叉树:

【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)_第5张图片

        完全二叉树是一种效率很高的数据结构,满二叉树是一种特殊的完全二叉树。

三、结点数与深度

        我们假设总结点数为n,度为0的结点数为n0,度为1的结点数为n2,度为2的结点数为n3。

        1.总结点数n等于n=n0+n1+n2,也就是度为0、1、2的结点的和,总结点数还可以用另一种方法得到。已知出了首结点(根)外,每个结点都通过一条边与上一结点连接,所以我们可以通过计算度为0、1、2的结点各连结的结点数再加上首结点来求得总结点数,也就是n=0*n0+1*n1+2*n2+1。将两个式子联立可得n0=n2+1,也就是度为0的结点数是度为2的结点数+1。注意:完全二叉树中,n1的值只能是0或1,所以在求完全二叉树的结点数时,已知总结点数n和n0,n2当中的任意一个即可推出n1的值。

       2. 深度。满二叉树中,深度为1,结点数为1;深度为2,结点数为1+2=3;深度为3,结点数为1+2+4=7……依次类推当深度为n时,结点数为1+2^1+2^2+……+2^n,这是一个等比数列的和,根据公式可得当深度为n时,结点数为2^n-1。同理若已知结点数为k,深度为log(k+1)。在任意二叉树中,深度为n时,结点数的范围是2^(n-1) ~ 2^n-1。

总结

        1.n0=n2+1

        2.完全二叉树中,n1=0或1

        3.满二叉树中,深度为n,结点数为2^n-1;结点数为k,深度为log(k+1)

        4.任意二叉树中,结点数的范围是2^(n-1) ~ 2^n-1

你可能感兴趣的:(C语言数据结构,数据结构,c语言,算法)