問題描述:
如果某二叉樹任意節點的左右子樹的深度相差不能超過1,那麼它就是一顆平衡二叉樹。請事先未完成的checkBalance函數,判斷給定的輸入節點是否爲平衡二叉樹。
bool checkBalance(Node* root)
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val = val;
left = null;
right = null;
}
TreeNode(int val,TreeNode left,TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution1 {
boolean checkBalance(TreeNode root) {
if(root == null)
return true;
int right = deep(root.right);
int left = deep(root.left);
if(right-left > 1 || left - right > 1)
return false;
return checkBalance(root.right) && checkBalance(root.left);
}
int deep(TreeNode root) {
if(root == null)
return 0;
int deepRight = deep(root.right);
int deepLeft = deep(root.left);
return 1 + (deepRight>deepLeft?deepRight:deepLeft);
}
public static void main(String[] args) {
TreeNode val_2 = new TreeNode(2);
TreeNode val_4 = new TreeNode(4);
TreeNode val_3 = new TreeNode(3,val_2,val_4);
//TreeNode root = new TreeNode(5,val_3,null);
TreeNode val_6 = new TreeNode(6);
TreeNode root = new TreeNode(5,val_3,val_6);
/*
TreeNode val_5 = new TreeNode(5);
TreeNode val_4 = new TreeNode(4,null,val_5);
TreeNode val_2 = new TreeNode(2,null,val_4);
TreeNode val_7 = new TreeNode(7);
TreeNode val_6 = new TreeNode(6,null,val_7);
TreeNode val_3 = new TreeNode(3,null,val_6);
TreeNode root = new TreeNode(1,val_2,val_3);
*/
Solution1 so1 = new Solution1();
System.out.println(so1.checkBalance(root));
}
}