노드의 수는 [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)

이것은 완전한 이진 트리도 계산할 수있다 아니라, 완전한 이진 트리의 특성을 사용하지 않았다!

우리는 자연 사용할 수있는 노드의 수를 완전 이진 트리와 같다 \ (^ {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