平衡二叉树指的是一个二叉树,其左右子树的高度相差不超过1,并且它的左右子树又分别为平衡二叉树。因此,验证一个二叉树是否为平衡二叉树的步骤如下:
- 根节点为空,则为平衡二叉树
- 分别计算根节点左右子树的高度
- 判断左右子树的高度相差是否小于等于1并且左右子树为平衡二叉树
具体代码参考如下:
/**
* 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) {
//1.root为空,为平衡二叉树
if(root == null){
return true;
}
//2.左右子树的高度
int leftChildHeight = treeHeight(root.left);
int rightChildHeight = treeHeight(root.right);
//3.只有左右子树的高度相差小于等于1,并且左右子树都为平衡二叉树时改树为平衡二叉树
return Math.abs(leftChildHeight-rightChildHeight)<=1 && isBalanced(root.left)&&isBalanced(root.right);
}
private int treeHeight(TreeNode root){
//1.树为空,则高度为0
if(root == null){
return 0;
}
//2. 计算左、右子树的高度
int leftChildHeight = treeHeight(root.left);
int rightChildHeight = treeHeight(root.right);
return leftChildHeight>=rightChildHeight?leftChildHeight+1:rightChildHeight+1;
}
}