そもそも、私は C や C++ を初めて使用するわけではありません。ただし、現在 Mac Yosemite で C++ を使用しています。キー (データ) 変数によって識別される 2 つのノードの共通の祖先を返す再帰関数を作成しようとしています。ロジックは単純で、両方のノードが同じブランチに入るまでツリーをトラバースします。これらのノードが分岐するノードが共通の祖先になります。これを念頭に置いて、次のコードを思いつきました。
Node * commonAncestor(Node *n, int left_elem, int right_elem)
{
if (n == NULL || n->key()==left_elem || n->key() == right_elem){return NULL;}
if (left_elem < n->key() && right_elem > n->key()) {return n;}
if (left_elem > n->key() || right_elem < n->key()) {
cout<<"\n...Consider changing the order of the elements"<<endl;
}
if (left_elem < n->key() && right_elem < n->key()) {
commonAncestor(n->Left(), left_elem, right_elem);
}
if (left_elem > n->key() && right_elem > n->key()) {
commonAncestor(n->Right(), left_elem, right_elem);
}
}
私は働くべきです、私は同様のプログラムを行ってきました。ただし、プログラムはコンパイルされません。コンパイラエラーが発生"control may reach end of non-void function"
します return ステートメントがあるため、これは奇妙です。また、このエラーを回避するために、ルート ノードのみを返す return ステートメントを最後に追加してみました。私は混乱しています... XCodeの設定で何かをする必要がありますか? 私の論理は間違っていますか?