250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(Leet Code c++)Balanced Binary Tree 본문
728x90
반응형
110. Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: true
Example 2:
Input: root = [1,2,2,3,3,null,null,4,4] Output: false
Example 3:
Input: root = [] Output: true
Constraints:
- The number of nodes in the tree is in the range [0, 5000].
- -104 <= Node.val <= 104
주어진 트리가 균형 이진 트리인지 확인하는 문제.
getHeight() 함수로 트리의 왼쪽 자식의 height와 오른쪽 자식의 height를 구한다.
재귀를 통해 left와 right의 차이가 1이 나지 않으면서, 왼쪽 자식의 노드가 균형이 맞춰져 있고, 오른쪽 자식의 노드 또한 균형이 맞춰져 있다면 true를 반환.
그렇지 않다면 false를 반환한다.
재귀가 있기 때문에 헷갈릴 수 있지만, 천천히 따라가면 충분히 풀 수 있는 문제.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int getHeight(TreeNode * node){
if(node == NULL){
return 0;
}
return 1 + max(getHeight(node->left), getHeight(node->right));
}
bool dfs(TreeNode * node){
int left = 0;
int right = 0;
if(node == NULL){
return true;
}
left = getHeight(node->left);
right = getHeight(node->right);
if(abs(left - right) <= 1 && dfs(node->left) && dfs(node->right)){
return true;
}
return false;
}
bool isBalanced(TreeNode* root) {
if(root != NULL){
if(!dfs(root)){
return false;
}
}
return true;
}
};
728x90
반응형
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code c++)Path Sum (0) | 2021.07.15 |
---|---|
(Leet Code c++)Minimum Depth of Binary Tree (0) | 2021.07.15 |
(Leet Code c++)Convert Sorted Array to Binary Search Tree (0) | 2021.07.14 |
(Leet Code c++)Concatenation of Array (0) | 2021.07.14 |
(Leet Code c++)Maximum Depth of Binary Tree (0) | 2021.07.14 |