Problem: 110. 平衡二叉树
方法一:递归
思路
平衡二叉树的定义:二叉树的每个节点的左右子树的高度差的绝对值不超过1,则二叉树是平衡二叉树。这是一个递归定义,设左子树深度为 l e f t left left,右子树深度为 r i g h t right right,递归过程若 ∣ l e f t − r i g h t ∣ > 1 \left | left-right \right | > 1 ∣left−right∣>1则该二叉树不是平衡二叉树。
Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode* root) {
bool res = true;
function<int(TreeNode*)> dfs = [&](TreeNode* node){
if(node == nullptr) return 0;
int left = dfs(node->left);
int right = dfs(node->right);
if(abs(left - right) > 1) res = false;
return max(left, right) + 1;
};
dfs(root);
return res;
}
};
复杂度
-
时间复杂度: O ( n ) O(n) O(n)
-
空间复杂度: O ( n ) O(n) O(n)