问题描述:
判断二叉树是否为平衡二叉树。
注:平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不大于1。
算法实现:
public boolean isBalance(Node head) {
boolean[] res = new boolean[1];
res[0] = true;
getHeight(head, 1, res);
return res[0];
}
public int getHeight(Node head, int level, boolean[] res) {
if(head == null) {
return level;
}
int leftHeight = getHeight(head.left, level + 1, res);
if(!res[0]) {
return level;
}
int rightHeight = getHeight(head.right, level + 1, res);
if(!res[0]) {
return level;
}
if(Math.abs(leftHeight - rightHeight) > 1) {
res[0] = false;
}
return Math.max(leftHeight, rightHeight);
}
算法解析:
1.借助二叉树的后序遍历;
2.判断头结点的左子树是否为平衡二叉树;
3.判断头结点的右子树是否为平衡二叉树;
4.针对当前节点进行左右子树高度的获取、记录和判断,并根据判断结果决定程序时继续向上递归或返回退出。
扫描二维码关注公众号,回复:
10637564 查看本文章
注:解析更多是针对代码进行的个人理解,不是对代码的具体解释,尤其是针对递归问题,要多看多写一些,再自己构思解法的时候才能更得心应手。
操千曲而后晓声,观千剑而后识器。