题目
判断一个二叉树是否是平衡的二叉树。(有关平衡二叉树,详见数据结构)
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees ofevery node never differ by more than 1.
思路
给定一个二叉树,判断该树的最大深度和最小深度的差是否小于等与1。
如果小于等于1,并不能表示平衡,还需判断它的左右子树是否是平衡二叉树。
代码如下:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(!root)
return true;
int maxDep = maxDepth(root);
int minDep = minDepth(root);
if(maxDep-minDep>1)
return false;
return isBalanced(root->left) && isBalanced(root->right);
}
int maxDepth(TreeNode *root)
{
if(!root)
return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return 1+(left>right?left:right);
}
int minDepth(TreeNode *root)
{
if(!root)
return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return 1+(left<right?left:right);
}
};
注意:没有 if(!root) return true; 是错误的,会出现无法退出循环,出现 run time error!
最新:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
int left = height(root.left);
int right = height(root.right);
if(left-right > 1 || left-right < -1 ){
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
private int height(TreeNode root){
if(root == null){
return 0;
}
return 1 + Math.max(height(root.left), height(root.right));
}
}