1.3 KiB
1.3 KiB
题目地址
https://leetcode-cn.com/problems/balanced-binary-tree/
思路
C++代码
class Solution {
public:
// 一开始的想法是 遍历这棵树,然后针对每个节点判断其左右子树的深度
// 求node为头节点二叉树的深度,并且比较起左右节点的高度差
// 平衡树的条件: 左子树是平衡树,右子树是平衡树,左右子树高度相差不超过1。
// 递归三部曲
// 1. 明确终止条件:如果node为null
// 2. 明确返回信息: 判断左子树,判断右子树
// 3. 一次递归要处理的逻辑
int depth(TreeNode* node) {
if (node == NULL) {
return 0;
}
int left = depth(node->left);
if (left == -1) return -1;
int right = depth(node->right);
if (right == -1) return -1;
return abs(left - right) > 1 ? -1 : 1 + max(left, right);
}
bool isBalanced(TreeNode* root) {
return depth(root) == -1 ? false : true;
}
};
更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。