int cntHeight(TreeNode *root) {
if(root == NULL) return 0;
int l = cntHeight(root->left);
int r = cntHeight(root->right);
if(l < 0 || r < 0 || abs(l-r) > 1) return -1;
else return max(l, r) + 1;
}
bool isBalanced(TreeNode *root) {
return cntHeight(root) >= 0;
}
我在 C 中找到了这个解决方案来检查二叉树是否平衡。但是,我很难想象这个算法是如何完全工作的。出于这个原因,有两件事我不确定。
- 算法是否在树的中间而不只是边上递归?
- 我注意到 only
max(1, r)
被调用,我们不需要找到min
吗?
此外,您将如何开发这样的算法?我不知道如何想出这样的解决方案..