问题概述:如何快速判断是否平衡二叉树?
解决方法:中序遍历+剪枝
1.用-1标记非平衡二叉树。遍历左子树,若发现子树为非平衡二叉树,返回-1,则不用遍历右子树,右子树同理。
2.若左右子树都符合平衡二叉树,则比较两者深度,不符合返回-1;
代码:
/**
* 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) {
return dfs(root) == -1 ? false : true;
}
int dfs(TreeNode* root){
if(root == NULL) return 0;
int left = dfs(root -> left);
if(left == -1) return -1;
int right = dfs(root -> right);
if(right == -1) return -1;
return abs(left - right) < 2 ? max(left, right) + 1 : -1;
}
};