题解 | 判断是不是平衡二叉树
稍微做的有点久,学到了两点:
- 用负数(或为用到的int范围)来代表布尔值
- 剪枝操作。如该题的搜索其实还是遵循的后续遍历,所以实际上时间复杂度是O(N)
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 IsBalanced(TreeNode pRoot) { if(pRoot == null) return 0; int left = IsBalanced(pRoot.left); if(left == -1) return -1; int right = IsBalanced(pRoot.right); if(right == -1) return -1; if(Math.abs(left-right)>1) return -1; return Math.max(left, right) +1 ; } public int depth (TreeNode pRoot) { if(pRoot == null) return 0; return Math.max(depth(pRoot.left), depth(pRoot.right))+1; } public boolean IsBalanced_Solution (TreeNode pRoot) { // write code here if(pRoot == null) return true; if( IsBalanced(pRoot) != -1) return true; return false; } }