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 hereif (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;}
};
本来以为性能会很差,结果还可以: