题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
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 int maxDepth (TreeNode root) {
// 递归终止
if (root == null) {
return 0;
}
// dfs,先递归左子结点,再递归右子结点,最后求出每一子树的深度的最大值
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
public boolean IsBalanced_Solution (TreeNode pRoot) {
// write code here
if(pRoot==null) return true;
if(Math.abs(maxDepth(pRoot.left)-maxDepth(pRoot.right))>1){
return false;
}
return IsBalanced_Solution(pRoot.left) && IsBalanced_Solution(pRoot.right);
}
}
感觉灵感来了,只用了三行便搞定了,不过需要调用之前编写过的求深度的函数
总结:
在进行一些递归的判断时,可以把跳出的条件定为“一旦子问题不满足,就为假”,那么就可以把条件用if(){return false;}的模板放入递归函数中,然后把真的条件和递归调用放在最后的return后,层层递归