判断一个平衡二叉树需要计算它的最大高度和最小高度,此类问题需要用二叉树的后续遍历
通过判断左子树和右子树的高度来计算最大高度和最小高度
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return bool布尔型
*/
public boolean IsBalanced_Solution (TreeNode pRoot) {
// write code here
if(pRoot == null) return false;
return (maxLen(pRoot)-minLen(pRoot))>1? false:true; //判断最大高度差跟最小高度差的差值来判断是否为平衡二叉树
}
public int maxLen(TreeNode root){
if(root == null) return 0;
int left = maxLen(root.left); //计算左子树的高度
int right = maxLen(root.right); //计算右子树的高度
int rootVal = 1+Math.max(left,right); //计算最大高度
return rootVal;
}
public int minLen(TreeNode root){
if(root == null) return 0;
int left = maxLen(root.left); //计算左子树的高度
int right = maxLen(root.right); //计算右子树的高度
int rootVal = 1+Math.min(left,right); //算出最小高度
return rootVal;
}
}
需要记住的是,求高度是由树的下到上,进行计算,所以需要先得知左右子树的高度,如果计算深度是要从根节点到最近的一个叶子结点,也可以进行后续排序,但是要注意,避免深度为假1的情况根节点(左子树或者右子树为空,但不全为空,如果按照高度方式进行计算会导致深度为1),所以在计算深度的时候要判断一下左子树或者右子树为空,然后使用 rootVal = 1+ left 或者 rootVal = 1 + right;