【发布时间】:2015-01-21 02:44:26
【问题描述】:
首先,我对 C 或 C++ 并不陌生。但是,我目前正在 Mac Yosemite 上使用 C++。我只是想编写一个递归函数来返回两个节点的共同祖先,这两个节点由它们的键(数据)变量标识。逻辑很简单,遍历树,直到两个节点都在同一个分支中,这些节点发散的节点就是共同的祖先。怀着这样的想法,我想出了如下代码:
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 语句,它只返回根节点。我很困惑......我应该对 XCode 设置做些什么吗?我的逻辑错了吗?
【问题讨论】:
-
将return语句放在最后是否修复了错误?
-
是的,它让我编译但不会返回正确的节点。它正在返回根......在这种情况下。
标签: c++ xcode macos c++11 least-common-ancestor