LeetCode 110 Balanced Binary Tree(밸런스 트리)(*)
번역하다
, 。( ……
, :
1。
원문
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 depth of the two subtrees of every node never differ by more than 1.
분석
이 문제는 매우 의미가 있고 전면적으로 고찰되었다고 나는 생각한다.나는 주로 다음과 같은 몇 가지 측면이 있다고 생각한다.
1,
2,
3,
먼저 작은 모듈부터 쓰세요. 바로 나무의 높이입니다.사실 나는 아래의 코드를 보거나 요 며칠 코드를 어떻게 보는지 왜 눈에 거슬리는지 날씨가 너무 추워서 그런지 생각이 몸처럼 굳어졌다.오늘 중설...내일은 고향의 역사상 가장 낮은 온도에 도달할 것이다.
int getHeight(TreeNode* root) {
int left = 0, right = 0;
if (!root || (!root->left &&!root->right))
return 0;
if (root->left != NULL)
left = 1 + getHeight(root->left);
if (root->right != NULL)
right = 1 + getHeight(root->right);
return max(left, right);
}
끊임없이 위에서 아래로 돌아가는 귀속을 통해 그 높이를 구하는데, 가장 큰 높이를 구하기 때문에max 함수를 사용했다.
위의 함수는 하나의 노드 아래의 최대 깊이를 구하는 것이지 이 노드를 포함하지 않기 때문에 아래의 함수에서 세 개의 연산자를 사용하여 현재 노드의 깊이를 구한다.뒤에 abs 함수를 계속 사용하여 절대값을 구했습니다.
이어서 계속 귀속된다. 만약에 한 걸음 (한 노드) 조건을 만족시키지 못하면 바로 가짜로 돌아간다.
bool isBalanced(TreeNode* root) {
if (!root || (!root->left && !root->right)) return true;
int left = root->left == NULL ? 0 : getHeight(root->left) + 1;
int right = root->right == NULL ? 0 : getHeight(root->right) + 1;
if (abs(left - right) > 1)
return false;
else if (!isBalanced(root->left) || !isBalanced(root->right))
return false;
return true;
}
이 문제는 나는 그래도 매우 어렵다고 생각한다. 그래도 많이 반복해서 궁리해야 한다.
코드
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int getHeight(TreeNode* root) {
int left = 0, right = 0;
if (!root || (!root->left &&!root->right))
return 0;
if (root->left != NULL)
left = 1 + getHeight(root->left);
if (root->right != NULL)
right = 1 + getHeight(root->right);
return max(left, right);
}
bool isBalanced(TreeNode* root) {
if (!root || (!root->left && !root->right)) return true;
int left = root->left == NULL ? 0 : getHeight(root->left) + 1;
int right = root->right == NULL ? 0 : getHeight(root->right) + 1;
if (abs(left - right) > 1)
return false;
else if (!isBalanced(root->left) || !isBalanced(root->right))
return false;
return true;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.