完全二叉树叶子结点的算法

如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n= n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2,就可根据完全二叉树的结点总数计算出叶子结点数。

 

在求树的最大节点数时n1为0还是1要特别注意,有时n1既能为0又能为1,有时只有一种可能。

按常规的思路排好树后,如果最后一个叶子是一个右孩子并且它的父节点不是那一行中最后一个(n1=0的非满树),那就可以让该父节点的左边节点发展一个左孩子,得到一个n1,这时仍满足之前的性质,但总节点数n多了1。

    原文作者:GROWING_lai
    原文地址: https://blog.csdn.net/QQGROWING/article/details/7671475
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞