今日你如约而至了吗?每天坚持下去,熟能生巧,互相监督哦~上题:
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
分析:平衡二叉树,首先要知道什么是平衡二叉树:
1、首先是一个二叉排序树
2、左右子树的高度差绝对值<=1;
题目中已经去掉了排序,所以我们只要考虑左右子树的高度差的绝对值<=1?
向之前求解二叉树深度一行,我们还是可以用递归的方法,但是这里多了一些判断的条件。
代码:
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return Depth(root)!=-1;
}
public int Depth(TreeNode root){
if(root==null)return 0; //如果为空,则返回0;
int left=Depth(root.left); //求左子树的高度
if(left==-1)return -1; //如果高度差>1,则直接返回。
int right=Depth(root.right);
if(right==-1)return -1; //右子树同样
if(Math.abs(left-right)>1){
return -1;
}
else{
return left>right?left+1:right+1;
}
}
}
牛客运行通过
运行时间:21ms
运行内存:9456Kb
递归方法很简单,代码也比较简洁,但是真的不是很好想它的逻辑。
欢迎各位互相交流哦~