주제 링크 : 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)