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でこのソリューションを見つけました。ただし、このアルゴリズムが完全にどのように機能するかを視覚化するのは非常に困難です。そのため、私が確信していない点が 2 つあります。
- アルゴリズムは、ツリーの両側だけでなく、途中で再帰しますか?
max(1, r)
のみが呼び出されていることに気付きmin
ました。 も検索する必要はありませんか?
さらに、このようなアルゴリズムを開発するにはどうすればよいでしょうか? このような解決策を思いつく方法がわかりません..