二分探索木の高さを計算する方法を探していましたが、研究の結果、次の実装にたどり着きました。私はまだそれが機能する理由を理解しようとしていますが、なぜ機能しないのかもわかりません。これが私の身長関数です。
int BinaryTreeNode::height() const {
int lefth = left->height();
int righth = right->height();
if(lefth > righth) {
return lefth + 1;
} else {
return righth + 1;
}
}
これがノードのクラス定義です
class BinaryTreeNode {
public:
Data * nodeData;
BinaryTreeNode * left;
BinaryTreeNode * right;
実行しようとすると、プログラムがロックアップしてクラッシュします。明らかな何かが欠けていますか?
編集:なぜこれがうまくいかないのですか?
int BinaryTreeNode::height() const {
int l = 0;
if (left != NULL) {
left->height();
}
int r = 0;
if (right != NULL) {
right->height();
}
if (l > r) {
return l + 1;
}
else {
return r + 1;
}
}