1.题目
给定一个二叉树,确定它是否是高度平衡的。 对于这个问题,一个高度平衡的二叉树被定义为一个二叉树,其中每个节点的两个子树的深度相差不会超过1。
2.分析过程
思路:先写一个函数来求最大深度,对于二叉树的每一个节点,都求它的左子树和右子树的最大深度,如果两个深度之间的差大于1,那么就返回false。不断递归判断即可。 注:也可使用树的层次遍历来求树的深度,而不必使用递归。
3.代码实现
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
public boolean isBalanced(TreeNode root) {
if(root==null) return true;
int ldpt=depth(root.left);
int rdpt=depth(root.right);
if(ldpt-rdpt>1 || ldpt-rdpt<-1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
public int depth(TreeNode node){//使用树的层次遍历求树的深度
if(node==null) return 0;
int count=0;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(node);
while(!queue.isEmpty()){
int n=queue.size();
for(int i=0;i<n;i++){
TreeNode temp=queue.poll();
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
count++;
}
return count;
}
}
题目来自牛客网leetcode