LeetCode - BalancedBinaryTree

来源:互联网 发布:流动商贩全国数据 编辑:程序博客网 时间:2024/05/29 18:52

/**

 * 问题:判断一棵树是否是平衡二叉树。

 * 解:平衡二叉树要求所有左右子树的高度相差不会超过1,所以算法的核心是递归。

 */

public class BalancedBinaryTree {

// 内部节点类

public class TreeNode {

int val; // 节点的关键字

TreeNode left; // 左孩子

TreeNode right; // 右孩子

// 构造函数

TreeNode(int val) {

this.val = val;

}

}

public boolean isBalance(TreeNode root) {

// 空判断

if (root == null) 

return true;

// 先看根节点的左右子树是否平衡

int leftHeight = getTreeHeight(root.left);

int rightHeight = getTreeHeight(root.right);

if (Math.abs(leftHeight - rightHeight) > 1) 

return false;

// 递归判断左子树是否平衡

if (root.left != null) {

if (isBalance(root.left) == false) 

return false;

}

// 递归判断右子树是否平衡

if (root.right != null) {

if (isBalance(root.right) == false) 

return false;

}

return true;

}

public int getTreeHeight(TreeNode node){

// 空判断

if (node == null)

return 0;

// 到达叶子节点时递归结束

if (node.left == null && node.right == null)

return 1;

// 递归计算左右子树的高度

int leftHeight = getTreeHeight(node.left);

int rightHeight = getTreeHeight(node.right);

// 比较的是子树的高度,而返回的是当前节点的高度,易漏 +1。

return (leftHeight >= rightHeight) ? leftHeight+1 : rightHeight+1;

}

}
0 0