首先是樹結點的結構
struct treenode
;typedef struct treenode tnode;
typedef struct treenode *t_pointer;
這沒什麼說的。
建樹的**:
void build_tree(t_pointer &t)
else
}
輸出樹
t_pointer printf_tree(t_pointer &t)
}
int main()
這裡建樹的方式是先序。
輸入的時候要注意。要一次性輸入「ab##c##」。不能輸入乙個『a』然後就按回車。這樣的話,下一次讀取的字元就是換行符』\n』。
build_tree(t_pointer &t)中,我用的引用傳遞引數。如果你要用指標傳遞引數的話,就得傳遞乙個二級指標t_pointer *t。
scanf("%c",&ch);也可以用ch=getchar();代替。
t=(t_pointer)malloc(sizeof(tnode));注意這裡不能用t_pointer t=(t_pointer)malloc(sizeof(tnode));如果用後者,返回主函式的時候,主函式中宣告的root仍是null。因為用後者的話,就是說你新建了乙個t,但這個t不是root。如果已經申請了乙個t,賦好值,進入到build_tree(t->left)和build_tree(t->right)。那麼進入函式之後,t->left就成為新的t。
我debug了乙個,t->left和t->right在沒有動態申請記憶體的時候:
一般的heapalloc和localalloc分配記憶體的初值都是這個,最常見為使用未初始化的指標導致0xc0000005訪問0xbaadfood出錯.參考:
我覺得遞迴的過程,還是要自己debug一下,看看哪一步執行到**,返回的時候返回的是**。
乙個很簡單的建樹過程。我也花了很長時間才弄明白。紙上談兵很容易,不如自己親手敲一下。
二叉樹的建立(C語言)
1.p q 1 其中p為頂點,q為邊 2.結點的度 子樹的個數,樹的度 結點度的最大值 3.連通且無圈 由於所有的樹都可以轉化為二叉樹,下列出二叉樹的性質 1.結點數的最值問題 1 第i層的結點數最多為 2 i 1 2 深度為k的二叉樹中,結點數最多為 2 k 1 2.葉子結點個數 與 度為2的結點...
c語言的二叉樹的建立
include include include define m 100 定義最大的節點數 建立二叉樹的型別 typedef struct tnode bintree 定義指標變數 輸入字串返回二叉鍊錶 bintree ceartetree char str else top 指標後移 s top ...
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...