您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 1浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

222. 完全二叉树的节点个数

宝哥大数据 发布时间:2019-11-29 10:23:11 ,浏览量:1

一、222. 完全二叉树的节点个数 1.1、题目描述

在这里插入图片描述

1.2、题解 1.2.1、递归 1.2.2、层次迭代 1.2.3、二分查找

  完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

  它是一棵空树或者它的叶子节点只出在最后两层,若最后一层不满则叶子节点只在最左侧。

  再来回顾一下满二叉的节点个数怎么计算,如果满二叉树的层数为h,则总节点数为:2^h - 1.   那么我们来对root节点的左右子树进行高度统计,分别记为left和right,有以下两种结果:

  • left == right。这说明,左子树一定是满二叉树,因为节点已经填充到右子树了,左子树必定已经填满了。所以左子树的节点总数我们可以直接得到,是2^left - 1,加上当前这个root节点,则正好是2^left。再对右子树进行递归统计。
  • left != right。说明此时最后一层不满,但倒数第二层已经满了,可以直接得到右子树的节点个数。同理,右子树节点+root节点,总数为2^right。再对左子树进行递归查找。
class Solution:
    def countNodes(self, root: TreeNode) -> int:
        if not root: return 0

        left = self.countLevel(root.left)
        right = self.countLevel(root.right)

        if left == right:
            return self.countNodes(root.right) + (1             
关注
打赏
1587549273
查看更多评论
0.0596s