给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
来源:力扣(LeetCode)
题目链接:https://leetcode-cn.com/problems/balanced-binary-tree
著作权归领扣网络所有。
商业转载请联系官方授权,非商业转载请注明出处。
解题方法一:从上而下递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
int nodeHight(TreeNode* root){
if(!root) return 0;
return max(nodeHight(root->left), nodeHight(root->right)) + 1;
}
public:
bool isBalanced(TreeNode* root) {
if(!root) return true;
return abs(nodeHight(root->left) - nodeHight(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}
};
解题方法二:从下而上递归
class Solution {
private:
int nodeHight(TreeNode* root){
if(!root) return 0;
int left = nodeHight(root->left);
if(left == -1) return -1;
int right = nodeHight(root->right);
if(right == -1) return -1;
return abs(left - right) > 1 ? -1 : max(left, right) + 1;
}
public:
bool isBalanced(TreeNode* root) {
return nodeHight(root) >= 0;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)