ALGORITHM/Java algorithm

[LeetCode][Java] 110. Balanced Binary Tree

호이호이호잇 2022. 9. 5. 21:58
728x90
반응형

문제에 대한 오해가 있어서..
역대급으로 틀려버렸다..

역시 오해는 금물!!

문제
left와 right 높이 차이가 1보다 크게 나면 false, 아니면 true를 return 하는 문제!

근데 나는 여기서 root의 left , right 로 생각하면 되는 줄 알고..
계속 root의 왼쪽과 오른쪽의 최대 높이를 구하고 그 두 개를 비교했다..

나의 오답
/**
 * 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 boolean isBalanced(TreeNode root) {
        if(root == null) {
            return true;
        }
        
        int rightHeight = check(root.right, 1);
        int leftHeight = check(root.left, 1);
        
        if( Math.abs(rightHeight - leftHeight) > 1) {
            return false;
        } else {
            return true;
        }
    }
    
    public int check(TreeNode tree, int height) {
        if(tree == null) return height;
        
        return Math.max(check(tree.right, height+1), check(tree.left, height+1));
    }
}

근데 계속 틀리는 것..
그래서 확인을 해보았더니

이런 경우도 false로 생각하고 있는 것을 발견!

그래서 아님을 깨닫고 수정에 들어가서 정답을 맞췄다.!

나의 정답
/**
 * 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 boolean isBalanced(TreeNode root) {
        if(root == null) {
            return true;
        }
        
        return check(root, 1) != -1;
    }
    
    public int check(TreeNode tree, int height) {
        if(tree == null) return height;
        
        int rightHeight = check(tree.right, 1);
        int leftHeight = check(tree.left, 1);
        
        if( Math.abs(rightHeight - leftHeight) > 1) {
            return -1;
        }
        
        return Math.max(check(tree.right, height+1), check(tree.left, height+1));
    }
}

내가 손코딩하고 디버깅했던 기록!


오래걸리긴 했지만
이번엔 진짜 내 힘으로 풀 수 있어서 좋았다.!

사실 다른 분들이 푼거 찾아봤는데, 내가 문제가 이해 덜 된 상태였어서
다른 분들의 해답이 이해가 가지 않아서 계속 내 소스로 하려고 고집부림..
그러다가 오답을 보고 이해하고!!

다음에는 compile error 내지 않고 차근차근 해보기!
바로바로 풀다보니 에러가 너무 많이 난다..
천천히 하즈아!!

728x90
반응형