제목 설명
이진 트리가 균형 이진 트리인지 확인하려면 이진 트리를 입력하십시오.
여기에서는 정렬 된 이진 트리인지 여부가 아닌 균형 만 고려하면됩니다.
아이디어 분석
균형 이진 트리 란 무엇입니까?
균형 이진 트리는 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));
}
}