[英]Print all leaf nodes of a Binary Search Tree
我正在嘗試按升序打印所有葉節點,但輸出與我預期的不同。
插入功能:
Node *insert(Node **root, int k)
{
if(*root == NULL)
{
Node *newNode = (Node *)malloc(sizeof(Node ));
if(newNode == NULL)
return NULL;
newNode->key = k;
newNode->left = NULL;
newNode->right = NULL;
(*root) = newNode;
return newNode;
}
if(k < (*root)->key)
return insert(&((*root)->left),k);
else
return insert((&(*root)->right),k);
}
升序打印功能:
void printLeafs(Node *r)
{
if (r != NULL)
{
if(r->right == NULL && r->left == NULL)
printf("%d ", r->key);
printLeafs(r->right);
printLeafs(r->left);
}
}
例子:
輸入:1 2 3 4 5 6 7 8 9
正確輸出:4 7 8 9
我的輸出:9
在這棵樹中,我的代碼應該打印:
4 6 7 9 10
有什么想法嗎?
你只留下葉子,因為
if(r->right == NULL && r->left == NULL)
對於非常特殊的輸入1 2 3 4 5 6 7 8 9
您只有一個葉子,即 9。
因此,您的代碼正在執行“打印二叉樹的所有葉節點”,並對葉節點施加壓力。
但是如果你想要所有節點:
要修復,您不應跳過非葉節點中的值,而是將其打印在正確的位置:
printLeafs(r->right);
printf("%d ", r->key);
printLeafs(r->left);
為了獲得樂趣和洞察力,請在未更改的代碼上嘗試不同的輸入: 5 4 6 2 1 3 8 7 9
注意:我承認我忽略了所需的輸出,因為它既不匹配“所有葉子”也不匹配“全部”。 我的回答符合(回顧)假設您有復制粘貼錯誤並且所需的輸出是1 2 3 4 5 6 7 8 9
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.