树的深度和高度
根节点r,某个子孙节点v
深度:从v走到r的边数
高度:一棵树的最大深度即高度,约定空树高度为-1
平衡二叉树的判定
public int getHeight(TreeNode treeNode) {
if(treeNode == null) return -1;
int leftHeight = treeNode.left != null ? getHeight(treeNode.left) : -1;
int rightHeight = treeNode.right != null ? getHeight(treeNode.right) : -1;
return 1 + (leftHeight > rightHeight ? leftHeight : rightHeight);
}
public boolean nodeIsBalanced(TreeNode treeNode) {
if(treeNode == null) return true;
int leftHeight = treeNode.left != null ? getHeight(treeNode.left) : -1;
int rightHeight = treeNode.right != null ? getHeight(treeNode.right) : -1;
return Math.abs(leftHeight - rightHeight) < 2;
}
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
//遍历每一个节点
//1.访问主节点
if(!nodeIsBalanced(root)) return false;
//2.访问左子树
if(!isBalanced(root.left)) return false;
//3.访问右子树
if(!isBalanced(root.right)) return false;
return true;
}