ノードの数[LeetCode】完全二分木

トピックへのリンク:https://leetcode-cn.com/problems/count-complete-tree-nodes

難易度:穏健派

合格率:57.4パーセント

件名の説明:

それは与え、完全なバイナリツリーを、ツリーのノードの数を取得します。

説明:

完全なバイナリツリーは以下のように定義される:バイナリツリーで、ボトムノードが充填されないことを除いて、ノード毎の残りの最大数、およびノードの底部層は、左端の位置の複数の層に集中しています。H層の底部には、層は、ノード1〜2時間を含む場合。

例:

输入:
    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} 2 - 。1 \)

それは、時間の複雑さである:\(O(ログ(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)

おすすめ

転載: www.cnblogs.com/powercai/p/11431934.html