-1
私はmake関数を使って、バイナリツリー、t、2つの整数a、bを取得し、aとbの間にある整数を出力します。私の関数(バイナリツリー上)が予期しない結果を出力するのはなぜですか?
ここでの例はバイナリツリーです。 3つのノードおよびデータ: 10,15,20。 私は、たとえば、この関数を呼び出す..(トン、10、20)の間に、結果として私は数1を期待するが、これは起こりません My機能は次のとおりです。
`
int between (tree t, int a, int b) {
if (t== NULL)
return 0;
if ((t->data >a) && (t->data <b))
return 1 + between(t->left,a,b) + between(t->right,a,b);
}
誰も私を説明できますか?
コードを1行ずつデバッガでステップ実行したとき、あなたは何を観察しましたか? – user0042
ルートが範囲内にない場合でも、範囲内にある数がサブツリーに存在することがあります。例えば。あなたの例では、ルートが10、右が15、右が20の不均等なツリーを持つことができます。この場合、コードはツリーを見下すことさえありません。 –
さらに、 'return'ステートメントに遭遇することなく、' void'関数の終わりに達することによって、あなたのプログラムは未定義の動作を示すかもしれません。 2つの条件のどちらも成立していない場合は、何も返しません。 –