题目描述
本题的思路就是对于每一个节点,依次递归求出每个节点的左子树高度和右子树高度,如果左右子树的高度之差大于1.就说明该二叉树非平衡。对于每一次返回值此处需要强调下,是返回该节点左右子树中的最大值,第二点需要强调的是对于root节点,只用判断其左右子树的高度差是否大于1即可,不需要加上root的高度。
算法1
(dfs) $O(n)$
C++ 代码
/**
* 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 ans = true;
bool isBalanced(TreeNode* root) {
if(!root) return true;
int leftDepth = dfs(root->left);
int rightDepth = dfs(root->right);
if (abs(leftDepth - rightDepth) <= 1 && ans) return true;
return false;
}
int dfs(TreeNode* root)
{
if(!root) return 0;
if(ans == false) return 0;
int leftDepth = dfs(root->left) + 1;
int rightDepth = dfs(root->right) + 1;
if(abs(leftDepth - rightDepth) <= 1) ans = true;
else ans = false;
return max(leftDepth, rightDepth);
}
};