반응형
https://leetcode.com/problems/count-complete-tree-nodes/
문제
Given the root of a complete binary tree, return the number of the nodes in the tree.
According to Wikipedia, every level, except possibly the last, is completely filled in a complete binary tree, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
Design an algorithm that runs in less than O(n) time complexity.
Example 1:
Input: root = [1,2,3,4,5,6]
Output: 6
Example 2:
Input: root = []
Output: 0
Example 3:
Input: root = [1]
Output: 1
Constraints:
- The number of nodes in the tree is in the range [0, 5 * 104].
- 0 <= Node.val <= 5 * 104
- The tree is guaranteed to be complete.
풀이
풀이 과정
완전 이진트리의 총 노드의 개수를 구하는 문제이다.
완전 이진트리란 총 h만큼의 레벨을 가진 트리에서 마지막 레벨을 제외한 모든 레벨의 노드가 채워져 있으며, 마지막 레벨의 노드들이 가능한 왼쪽에 위치해 있는 트리를 의미한다.
트리의 노드 하나당 두 개의 자식 노드를 가질 수 있기 때문에 레벨 h의 노드의 개수는 2h까지 될 수 있지만 완전 이진트리의 경우 마지막 레벨이 채워져있지 않기 때문에 노드의 최대 개수는 2h - 1이 된다
주어진 트리에서 각각 왼쪽의 노드와 오른쪽 노드를 재귀 호출하며 최종 노드의 개수를 구하면 되는 간단한 문제이다.
최종 코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int countNodes(TreeNode root) {
if(root == null) return 0;
return 1 + countNodes(root.left) + countNodes(root.right);
}
}
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 152. Maximum Product Subarray - Java (0) | 2022.11.17 |
---|---|
[LeetCode] 374. Guess Number Higher or Lower - Java (0) | 2022.11.17 |
[LeetCode] 53. Maximum Subarray - Java (0) | 2022.11.15 |
[LeetCode] 70. Climbing Stairs - Java (0) | 2022.10.05 |
[LeetCode] 238. Product of Array Except Self - Java (0) | 2022.10.05 |