题意:判断是否为二叉树
解法一:递归一,由于重复计算次数多,所以时间复杂度不能忍,暂且贴出来吧
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int dep(TreeNode root){
if(root == null) return 0;
int l = dep(root.left);
int r = dep(root.right);
return l > r ? l + 1: r + 1;
}
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
int l = dep(root.left);
int r = dep(root.right);
boolean flag1 = (l - r < 2) && (l - r > -2);
return flag1 && isBalanced(root.left) && isBalanced(root.right);
}
}
递归二:比解法一稍微好点,不用每次都求深度
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int getDep(TreeNode root){
if(root == null) return 0;
int l = getDep(root.left);
int r = getDep(root.right);
if(l==-1 || r==-1) return -1;
if((l-r > 1) || (l-r < -1)) return -1;
return l > r ? l + 1 : r + 1;
}
public boolean isBalanced(TreeNode root) {
if(root == null) return true;
int h = getDep(root);
if(h == -1) return false;
return true;
}
}