打印树的前20个节点

时间:2017-03-14 06:13:20

标签: c++ tree

好的,所以我在我的第一棵树上工作,我需要调整它以打印出树的前20个节点。我的订购,预订和后订单完整打印正在完美运行,但我似乎无法弄清楚如何在打印前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);
    }
}

是我在尝试在20个节点后停止打印时所做的。我的计数显然不起作用,因为它仍然打印每个节点。我添加了一行来判断我的计数并且它无法正常工作。

示例输出如下:

17 7
18 8
19 6
20 5
21 7
22 6

第一个数字是节点的值,第二个数字是我的计数。我说实话,并说我不确定我在计算什么,为什么/何时/如何重置。

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

任何帮助都会很棒!

3 个答案:

答案 0 :(得分:-1)

使用引用param将参数“int cnt”的类型更改为“int&amp; cnt”

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

答案 1 :(得分:-1)

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

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

答案 2 :(得分:-1)

在打印左子之后将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);
    }
}