您的位置:首页 > 其它

判断二叉树是不是平衡二叉树

2014-10-09 10:40 375 查看
需要重复遍历结点的算法

private static boolean isBalanced(Tree root) {
if (root == null) {
return false;
}

int left = getDepth(root.left);
int right = getDepth(root.right);
int diff = Math.abs(left - right);
if (diff > 1) {
return false;
}

return isBalanced(root.left) && isBalanced(root.right);
}

private static int getDepth(Tree root) {
if (root == null) {
return 0;
}

int left = getDepth(root.left);
int right = getDepth(root.right);
int max = Math.max(left, right);
return 1 + max;
}每个结点只遍历一次的解法
private static boolean isBalanced2(Tree root) {
int[] depth = { 0 };
return isBalanced(root, depth);
}

/**
* 使用后根遍历算法,记录每个结点的深度
* @param root 结点指针
* @param depth 当前结点的深度,由于java是传值的,无法在函数中修改传入的int,所以传int[]
* @return 当前结点是否是平衡结点
*/
private static boolean isBalanced(Tree root, int[] depth) {
if (root == null) {
depth[0] = 0;
return true;
}

int[] left = { 0 }, right = { 0 };
if (isBalanced(root.left, left) && isBalanced(root.right, right)) {
int diff = Math.abs(left[0] - right[0]);
if (diff <= 1) {
depth[0] = 1 + Math.max(left[0], right[0]);
return true;
}
}

return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: