C++ 打印树的前20个节点

C++ 打印树的前20个节点,c++,tree,C++,Tree,好的,我正在处理我的第一棵树,我需要调整它以打印出树的前20个节点。我的Inorder、Preorder和Postorder完整打印工作完美无瑕,但我似乎不知道如何在打印前20个节点后停止打印 void printino(tnode *c, int cnt) { if (c == NULL) return; if (cnt < 20) { cnt++; printino(c->lchild, cnt);

好的,我正在处理我的第一棵树,我需要调整它以打印出树的前20个节点。我的Inorder、Preorder和Postorder完整打印工作完美无瑕,但我似乎不知道如何在打印前20个节点后停止打印

void printino(tnode *c, int cnt)
{
    if (c == NULL)
        return;
    if (cnt < 20)
    {
        cnt++;
        printino(c->lchild, cnt);
        cout << c->val << " " << cnt << endl;
        printino(c->rchild, cnt);
    }
}
第一个数字是节点的值,第二个数字是我的计数。我要诚实地说,我真的不确定我在数什么或者为什么/何时/如何重置

据我所知,它在计算树中节点的深度?不是打印了多少个节点

任何帮助都会很好

使用参考参数将参数“int-cnt”的类型更改为“int&cnt”


参数可以通过两种方法传递给函数,它们是。传递值;通过参考传递。如果通过值传递,则函数内部更改的值不会影响函数外部的实际值。因此,如果要计算打印节点的大小,应该使用方法pass by reference

简单来说,您可以执行以下操作:-

void printInorder(tnode *root, int k, int cnt)
{
    if(root != NULL)
    {
        printInorder(root->left, k, cnt);

        if(cnt <  k)
        {
            cout << root->data;
            ++cnt;
        }

        printInorder(root->right, k, cnt);
    }
}
void printInorder(tnode*root、int k、int cnt)
{
if(root!=NULL)
{
打印顺序(根->左,k,cnt);
if(cnt右,k,cnt);
}
}

打印左子后将cnt++移动到:

void printino(tnode *c, int cnt)
{
    if (c == NULL)
        return;
    if (cnt < 20)
    { 
        printino(c->lchild, cnt);
        cnt++;
        cout << c->val << " " << cnt << endl;
        printino(c->rchild, cnt);
    }
}
void printino(tnode*c,int-cnt)
{
如果(c==NULL)
返回;
if(cnt<20)
{ 
printino(c->lchild,cnt);
cnt++;

能否解释一下这个问题是什么,以及为什么解决了这个问题,这将使答案更好。这是完美的。你能解释一下为什么这里需要引用而不是值吗?我认为当你通过引用时,它在递归调用运行时不会改变,但是如果你的变量有一个正常的值,它在每次递归调用中都会改变ing.(如果不正确,请告诉我此plz:D)参数可以通过两种方法传递给函数,它们是。按值传递;按引用传递。如果按值传递,函数内部更改的值不会影响函数外部的实际值。因此,如果要计算打印节点的大小,应该使用方法按引用传递。谢谢moon!这就是我要找的。我想我理解通过值传递还是通过引用传递,但显然不像解释时那样,这感觉像是一个非常愚蠢的错误。感谢您的帮助,并花时间向我解释我的错误所在!如果您在一张纸上写出带有参数值的函数调用,您将看到您的问题所在。
void printino(tnode *c, int cnt)
{
    if (c == NULL)
        return;
    if (cnt < 20)
    { 
        printino(c->lchild, cnt);
        cnt++;
        cout << c->val << " " << cnt << endl;
        printino(c->rchild, cnt);
    }
}