Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
链接:https://leetcode.com/problems/balanced-binary-tree/description/
题意很简单,判断一棵树是否为平衡二叉树,左右高度是否相差超过1
思路:
从root开始,计算每个节点的左右子树的高度,判断相差是否超过1,只要简单的两个递归就可以了,细节看代码
ac代码:
/**
* 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) {
if(root==NULL) //判断是否为空,为空则返回true
return true;
if(abs(Height(root->left)-Height(root->right))>1) //比较左右子树的高度是否相差超过1,
return false;
return isBalanced(root->left)&&isBalanced(root->right); //遍历整棵树的左右子树节点,判断每个分支是否为平衡二叉树
}
int Height(TreeNode* root){
if(root==NULL)
return 0; //若为空,则返回高度为0;
int left=1+Height(root->left); //左子树加上节点自己
int right=1+Height(root->right); //同理
return max(left,right); //返回左右子树最大的那个
}
};