typedef struct bitnode
bt;void creat(bt **t)
{ char c;
scanf("%c",&c);
*t = (bt *) malloc(sizeof(bt));
(**t).data=c; //或 (*t)->data = c;
creat(&(*t)->lchild);
creat(&(*t)->rchild);
void main()
bt tree;
creat(&&tree);
為什麼要用雙重指標?
為什麼不是以下的寫法?
void creat(bt *t)
{ char c;
scanf("%c",&c);
t = (bt *) malloc(sizeof(bt));
t->data=c;
creat(&(*t)->lchild);
creat(&(*t)->rchild);
void main()
bt *tree;
creat(tree);
因為是動態建立二叉樹的每個節點,所以malloc寫在了creat裡
*tree是乙個節點
tree是該節點的位址
&tree是該節點的位址的位址
當creat(tree)時
要求傳入*tree節點的指標
可是節點還沒被定義
這個指標沒有指向,是野指標,無法代入函式
好在,這個指標的指標是指向這個tree的,能代入
所以才用雙指標
如何建立乙個二叉樹?
用前序序列來建立乙個二叉樹,但單純用前序序列無法還原乙個二叉樹,我們還需要把空節點加入進去。這是一顆我網上隨便找的二叉樹,它的前序序列是1,2,4,8,9,5,10,11,3,6,12,7 我們加入空節點,用0表示,1,2,4,8,0,0,9,0,0,5,10,0,0,11,0,0,3,6,12,0...
使用C 建立乙個二叉樹
由於在二叉樹的建立過程中,我們需要使用輸入 讀取的值來判定二叉樹是否有左節點或者右節點。因此我們在建立的時候就需要使用指標的引用或者二重指標。我們定義二叉樹的基本結點形式如下所示 typedef int elemtype struct node typedef node node 為了方便理解,我們...
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...