二叉树问题:判断二叉树是否为平衡二叉树

问题描述:

判断二叉树是否为平衡二叉树。

注:平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不大于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 查看本文章

注:解析更多是针对代码进行的个人理解,不是对代码的具体解释,尤其是针对递归问题,要多看多写一些,再自己构思解法的时候才能更得心应手。

  操千曲而后晓声,观千剑而后识器。

猜你喜欢

转载自www.cnblogs.com/heibingtai/p/12669711.html