C語言二叉樹樹的層次遍歷,為什麼出錯呢??求大神

時間 2021-08-30 10:40:05

1樓:匿名使用者

程式仔細看了一下。

關鍵點是在層遍歷的處理上,有一點點小問題。

應該是先壓入當前樹結點的左右子樹,再彈出當前結點。

你卻是先彈出了,那還結點都釋放了,那裡還有結點的左右子樹呢?

修改如下,供參考:

#include

#include

/*樹結點結構體*/

struct tree;

/*佇列*/

struct queue;

/*佇列資訊表*/

struct queuenode;

/*初始化佇列資訊表*/

struct queuenode *init(struct queuenode *s)

/*入隊*/

void in_queue(struct queuenode *s,struct tree *ch)

/*出隊*/

void out_queue(struct queuenode *s)

}/*建立樹*/

struct tree *create(struct tree *tree)

return tree;

}/*層遍歷*/

void levelorder(struct tree *tree)}}

void main()

測試用資料:124##5##36##7##

輸出: 1 2 3 4 5 6 7

2樓:不知詳解

錯誤多的很啊,你的create函式有問題。裡面使用了一個tree變數,但是這個名稱已經用於struct tree型別.你把create函式和insert函式混淆了。

同時輸入函式有問題。

應該寫一個input(struct tree * p)用來輸入值,tree * create(void)用來建立新連結串列,insert(struct tree * p)函式用來在連結串列中插入新成員.

你題目也沒給我不知道你想幹什麼.

二叉樹遍歷,二叉樹遍歷問題?

這個說起來 很煩 不過可以 用遞迴的思想做。因為根為1左4 2 右5 7 3 6 遞迴的思想。再在左子樹的前序中 2 為根 當然 4 就是葉子 再看中序 在右邊。右3 為根 所以子樹的左子樹 還有5 7 右 為6在遞迴。不打了 根結點為1,則左為42,右5736,再看先根序列24 3576 左邊42...

二叉樹遍歷,二叉樹的遍歷到底是怎麼遍歷的啊?

中序 先遍歷左子樹 就是245組成的那棵樹 遍歷245時也是中序 就是 425 然後走根節點 1 然後遍歷右子樹 637 連起來就是4251637 這種問題。多看幾遍書就好了吧 中序是左中右順序遍歷。把每個點都看成頭結點然後左走,遇節點就遍歷左子樹,等左邊空了,就訪問當前節點的父節點,也就是中,寫下...

二叉樹是什麼,什麼是二叉樹?

在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用於實現二叉查詢樹和二叉堆。二叉樹的每個結點至多隻有二棵子樹 不存在度大於2的結點 二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2 ...