2015-01-16 67 views
1

最大的价值我想打印从BST n最大的价值,我有一定的问题的指针,这里是我的代码的一部分。打印n的BST

void bt_printN(node *leaf,int *n) 
{ 
    if((leaf != NULL) && *n > 0) 
    { 
     bt_printN(leaf->right,n); 
     printf("%s %d\n",leaf->word, leaf->i); 
     *n--; 
     bt_printN(leaf->left,n); 
    } 
} 

而且这也不行,什么是n值传递给这样的递归函数的正确方法?

+4

传球还行;这不是递减。 '* n - '递减指针,而不是指向的值;你需要'(* n) - '来减少值。一切是否正常都是一个单独的讨论;它看起来更有可能打印出N个最小值 - 除非如前所述,你首先要做RHS,所以......你可能确实没问题。 –

+0

Coudl你张贴的答案,所以我会接受它 – whd

+2

@WhozCraig:是的,我看到它会与最大值工作第一。我怀疑在打印出当前节点之前,在''leaf-> right'递归之后,代码应该检查'* n> 0',因为'n'的值可能通过调用缩小。 –

回答

1

的主要问题是不是你传递n的方式;主要问题是*n--递减指针,而不是指向值。您需要(*n)--来减少指向的值。

随着那固定的,你的代码是大多数的方式出现 - 尽管我对“从小到大”红鲱鱼意见。但是,我认为您需要在递归调用bt_printN(leaf->right, n);之后并在函数打印自己的节点之前检查n。您不必在第二次递归调用之前进行检查,但它可能是次要(最小)优化。正如所写的,如果输入*n == 1,它会向右递归,但随后RHS中每个节点都将打印其值,即使只需要一个节点。