[LeetCode] 完全二叉树的节点个数

题目链接: https://leetcode-cn.com/problems/count-complete-tree-nodes

难度:中等

通过率:57.4%

题目描述:

给出一个 完全二叉树 ,求出该树的节点个数。

说明:

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

示例:

输入:
    1
   / \
  2   3
 / \  /
4  5 6

输出: 6

思路:

暴力,每个节点都访问一下,看有多少个

时间复杂度:\(O(n)\)

class Solution:
    def countNodes(self, root: TreeNode) -> int:
        if not root: return 0
        return 1 + self.countNodes(root.left) + self.countNodes(root.right)

这样不是完全二叉树也可以计算,但是没有用到完全二叉树的性质!

我们可以通过运用性质,完全二叉树的节点个数等于 \(2^{h} - 1\)

所以有,时间复杂度:\(O(log(n)^2)\)

class Solution:
    def countNodes(self, root: TreeNode) -> int:
        if not root: return 0
        left_height = 0
        left_node = root
        right_height = 0
        right_node = root
        while left_node:
            left_node = left_node.left
            left_height += 1
        while right_node:
            right_node = right_node.right
            right_height += 1
        if left_height == right_height:
            return pow(2,left_height) - 1
        return 1 + self.countNodes(root.left) + self.countNodes(root.right)

posted on 2019-08-29 20:47  威行天下  阅读(955)  评论(0编辑  收藏  举报

导航