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;
    }
};

좋은 웹페이지 즐겨찾기