给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例
样例 1:
输入: tree = {1,2,3}
输出: true
样例解释:
如下,是一个平衡的二叉树。
1
/ \
2 3
样例 2:
输入: tree = {3,9,20,#,#,15,7}
输出: true
样例解释:
如下,是一个平衡的二叉树。
3
/ \
9 20
/ \
15 7
样例 2:
输入: tree = {1,#,2,3,4}
输出: false
样例解释:
如下,是一个不平衡的二叉树。1的左右子树高度差2
1
\
2
/ \
3 4
输入测试数据 (每行一个参数)如何理解测试数据?
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: True if this Binary tree is Balanced, or false.
*/
public boolean isBalanced(TreeNode root) {
// write your code here
if (root==null){
return true;
}else{
return checkNode(root);
}
}
//判断是否平衡的函数
public boolean checkNode(TreeNode root){
if (root==null){
return true;
}
//判断左节点
if (!checkNode(root.left)){
return false;
}
//判断右节点
if (!checkNode(root.right)){
return false;
}
//调用getDepth函数得到左右子树的深度
int left=getDePth(root.left);
int right=getDePth(root.right);
//abs函数求绝对值
if(Math.abs(left-right)>1){
return false;
}else{
return true;
}
}
public int getDePth(TreeNode root){
if(root==null) {
return 0;
}
int a=getDePth(root.left);
int b=getDePth(root.right);
return Math.max(a, b)+1;
}
}
输入
查看差别
{1,2,3}
输出
true
期望答案
true