Sword는 Offer-36 균형 이진 트리를 나타냅니다.

제목 설명

이진 트리가 균형 이진 트리인지 확인하려면 이진 트리를 입력하십시오.

여기에서는 정렬 된 이진 트리인지 여부가 아닌 균형 만 고려하면됩니다.

아이디어 분석

균형 이진 트리 란 무엇입니까?
균형 이진 트리는 AVL 트리 (AVL 알고리즘과 다름)라고도하며 다음과 같은 속성을 갖습니다. 빈 트리 또는 왼쪽과 오른쪽 하위 트리 사이의 높이 차이의 절대 값입니다. 1 개 이하이며 왼쪽 및 오른쪽 하위 트리는 모두 균형 이진 트리입니다. 이 솔루션은 이진 검색 트리가 연결 목록으로 퇴화되는 문제에 대한 좋은 솔루션이며 삽입, 검색 및 삭제의 시간 복잡도는 최상의 경우와 최악의 경우 O (logN)로 유지됩니다. 그러나 빈번한 회전은 삽입 및 삭제를 위해 O (logN) 시간을 희생하지만 이진 검색 트리에 비해 시간이 훨씬 더 안정적입니다.
균형 잡힌 이진 트리는 이진 트리 검색 (이진 트리 정렬이라고도 함)에서 발전했습니다. 그러나이 질문은 고려되지 않습니다.

우선, 이진 트리의 왼쪽 및 오른쪽 하위 트리도 이진 균형 트리 여야하므로 이진 트리를 재귀 적 방식으로 분해 할 수 있습니다. 동시에 이진 트리의 왼쪽 및 오른쪽 하위 트리 간의 깊이 차이는 1을 초과하지 않습니다. 따라서 깊이를 직접 계산하여 깊이 차이에 따라 판단합니다.

암호

public class Solution {
    
    
    public boolean IsBalanced_Solution(TreeNode root) {
    
    
        if(root == null) return true;
        if(Math.abs(TreeDeth(root.right)-TreeDeth(root.left))>1){
    
    
            //如果两者的深度差超过了1,说明不平衡
            return false;
        }
        //平衡树的左右子树也应该是平衡树
        return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
        
    }
    /**
    **求二叉树的深度
    **/
    public int TreeDeth(TreeNode root){
    
    
        if(root == null){
    
    
            return 0;
        }
        if(root.left == null&&root.right ==null){
    
    
            return 1;
        }
        return 1+Math.max(TreeDeth(root.right),TreeDeth(root.left));
    }
}

추천

출처blog.csdn.net/H1517043456/article/details/107434679