![](/img/trans.png)
[英]How to print the file tree of only the found files in a recursive function?
[英]How to only print 5 node of a tree using a recursive function
所以基本上我只想使用遞歸打印AVL樹的前5個節點
void printInOrder(void* theTree, void(*printnode)(void *data)) {
struct AVLTreeNode *node= (struct AVLTreeNode*)theTree;
if (node == NULL) return;
printInOrder(node->left, printnode);
(printnode)(node->data);
printInOrder(node->right, printnode);
}
上面的代碼是遞歸有序打印,我只想對其進行修改以僅打印出樹的前5個節點。 這也是printnode函數
void printnode(void *node){
struct todo *printnode = node;
printf("%s, %d\n", printnode->activity, printnode->priority);
}
您必須告訴該函數何時停止:您可以提供一個計數器,該計數器仍可打印多少個節點(最初為5個),並且每次實際打印一個節點時,您就遞減該計數器。
(或者,您可以增加計數器,但是在這種情況下,檢查有兩個條件-當前計數器值和最大計數器值-並且您需要將這兩個參數都作為參數傳遞,或者使它們成為全局變量)。
如果您需要執行除打印之外的其他操作,或者需要更靈活的方法
int printInOrder(void* theTree, int remaining, void(*printnode)(void *data))
{
if (0 == remaining)
return 0;
struct AVLTreeNode *node= (struct AVLTreeNode*)theTree;
if (node == NULL) return remaining;
remaining = printInOrder(node->left, remaining, printnode);
// When actually printing nodes, decrement counter
(printnode)(node->data); remaining--;
return printInOrder(node->right, remaining, printnode);
}
printInOrder(tree, 5, ...);
如果除了打印之外還需要執行其他操作,或者需要更靈活的功能,可以執行相同的操作,但是將參數傳遞給printnode
:
void printInOrder(void* theTree, int remaining, int(*printnode)(int r, void *data))
{
struct AVLTreeNode *node= (struct AVLTreeNode*)theTree;
if (node == NULL) return remaining;
printInOrder(node->left, remaining, printnode);
remaining = (printnode)(remaining, node->data);
printInOrder(node->right, remaining, printnode);
}
在第二種情況下,是printnode
操縱計數器,而printInOrder
只是傳遞計數器。 現在,每個節點都會調用一次printnode
,但是僅當counter非零時才執行實際打印,並且在所有情況下都可以執行其他任何內務處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.