簡體   English   中英

打印二叉搜索樹的所有葉節點

[英]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

其他例子:
bst

在這棵樹中,我的代碼應該打印:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM