
正文
[LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Balanced Binary Tree
【数据结构和算法】全面剖析树的各类遍历方法
描述

解析递归分别判断每个节点的左右子树
该题是Easy的原因是该题可以很容易的想到时间复杂度为O(n^2)的方法。即按照定义,判断根节点左右子树的高度是不是相差1,递归判断左右子树是不是平衡的。
根据深度判断左右子树是否平衡
在计算树的高度的同时判断该树是不是平衡的。
即,先判断子树是不是平衡的,若是,则返回子树的高度;若不是,则返回一个非法的数字,如负数。
当一个节点是左右子树有一个不是平衡二叉树则不必继续计算,直接返回false;当左右子树都是平衡时,再比较两个子树的高度是否相差1。若不是,则返回false,否则返回该节点的高度。
代码递归分别判断每个节点的左右子树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int depth (TreeNode root) {
if (root == null) {
return 0;
}
return Math.max(depth(root.left), depth(root.right)) + 1;
} public boolean isBalanced (TreeNode root) {
if (root == null) {
return true;
}
int left = depth(root.left);
int right = depth(root.right); return Math.abs(left - right) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
}
根据深度判断左右子树是否平衡
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) != -1;
}
private int height(TreeNode node){
if(null == node)
return 0;
int left = height(node.left);
if(left == -1)
return -1;
int right = height(node.right);
if(right == -1)
return -1;
if(Math.abs(left - right) > 1)
return -1;
return Math.max(left, right) + 1;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int depth (TreeNode root) {
if (root == null) {
return 0;
}
return Math.max(depth(root.left), depth(root.right)) + 1;
} public boolean isBalanced (TreeNode root) {
if (root == null) {
return true;
}
int left = depth(root.left);
int right = depth(root.right); return Math.abs(left - right) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) != -1;
}
private int height(TreeNode node){
if(null == node)
return 0;
int left = height(node.left);
if(left == -1)
return -1;
int right = height(node.right);
if(right == -1)
return -1;
if(Math.abs(left - right) > 1)
return -1;
return Math.max(left, right) + 1;
}
}






