编译器不理解递归函数来打印树级C ++

时间:2017-04-30 21:17:23

标签: c++ class recursion data-structures binary-search-tree

我目前正试图解决以下问题:

使用包装器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类调用该函数。相反,编译器告诉我递归函数应该只期望一个参数。 我知道我很可能不了解这里的大局,所以有人可以尝试为我解决这个问题吗?非常感谢。

1 个答案:

答案 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);
    }
}