好的,所以我在我的第一棵树上工作,我需要调整它以打印出树的前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
第一个数字是节点的值,第二个数字是我的计数。我说实话,并说我不确定我在计算什么,为什么/何时/如何重置。
据我所知,它计算树中节点的深度?不是打印了多少个节点?
任何帮助都会很棒!
答案 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);
}
}