题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
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后,层层递归