我目前正试图解决以下问题:
使用包装器void Tree :: levelOrder()编写函数void TreeNode :: levelOrder(int n)以使用递归打印树级别订单
这是类标题:
brew update && brew upgrade
使用这两个函数,我仍然会收到以下错误:
" ./ Tree.h:139:20:错误:函数调用的参数太多,预期单个 参数' p',有2个参数 返回显示(p,3); ~~~~~~~ ^ ./Tree.h:137:1:注意:'显示'在这里宣布 void Tree :: display(TreeNode * p){"
我不明白为什么编译器无法通过 2个参数从TreeNode类调用该函数。相反,编译器告诉我递归函数应该只期望一个参数。 我知道我很可能不了解这里的大局,所以有人可以尝试为我解决这个问题吗?非常感谢。
答案 0 :(得分:3)
问题出在这个方法中:
void Tree::display(TreeNode *p){
if (p!=NULL){
return display(p,0);
}
return display(p,0);
表示return this->display(p,0);
,编译器正确。
你的意思是p->display(p, 0);
。
作为旁注,两个类中的display()
方法似乎都是静态方法(并且它们没有任何理由);它们不使用用于调用它们的对象的属性。
为了正确的OOP,你应该按如下方式重写它们:
void TreeNode::display(int lvl)
{
if (left) {
left->display(lvl + 4);
}
if (right) {
right->display(lvl + 4);
}
if (lvl) {
std::cout << std::setw(lvl) << ' ';
}
cout << key << "\n";
}
void Tree::display(){
if (root) {
root->display(0);
}
}