1 题目
判断给定的二叉树是否是平衡二叉树
平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。
一颗树的高度指的是树的根节点到所有节点的距离中的最大值。
2 解法
2.1 多次递归
最初的想法肯定是先求出每个节点的左右子树的高度,如果差距不超过1再用递归的方式判断其左右子节点是否平衡.而求高度的方法也用递归的方法,所以需要用到多重递归:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
bool isBalanced(TreeNode* root) {
// write code here
if (root) {
if (abs(height(root->left) - height(root->right)) <= 1) {
return (isBalanced(root->left) && isBalanced(root->right));
} else {
return false;
}
}
return true;
}
int height(TreeNode* root) {
int h = 0;
if (root) {
int l = height(root->left);
int r = height(root->right);
h = 1 + (l > r ? l : r);
}
return h;
}
};
本来以为性能会很差,结果还可以: