輸入二叉樹的廣義表形式,將其轉變為二叉樹形式,至於怎樣輸入廣義表需要程式規定。
定義包含標頭檔案檔案t11.h中
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"malloc.h"
#include"stdlib.h" //atoi(),exit();
#include"io.h" //eof()
#include"math.h"
#define true 1
#define false 0
#define ok 1
#define error 0
typedef int status;
typedef int boolean;
定義資料結構標頭檔案gercs.h中
#define init_stack 100
#define init_stack_add 20
typedef struct node // 二叉樹的資料結構定義
*bitree,pbitree;
typedef struct
sqstack;
struct binode
;struct sqstack1
;typedef struct
*linkqueue,queue;
sqstack w;
定義包含實現函式功能模組gercs.cpp中
void inittree(bitree &t)
void initqueue(queue &q)
void initstack(sqstack &l)
l.top=l.bottom;
l.stacksize=init_stack;
}void initstack1(sqstack1 &l)
l.top=l.bottom;
l.stacksize=init_stack;
}void enqueue(queue &q,bitree t)
(q.rear++)->lp=t;
}void push(sqstack &l,char ch)
*(l.top++)=ch;
}void push1(sqstack1 &l,bitree ch)
(l.top++)->lp=ch;
}status pop(sqstack &l,char &e)
}status pop1(sqstack1 &l,bitree &e)
}status emptystack(sqstack l)
status emptystack1(sqstack1 l)
sqstack shuru(sqstack &s)
ch=ch1;
}else
}while(!emptystack(s))
return r;
}void createtree(bitree &t) // 先序建立二叉樹
t->data=ch;
createtree(t->lchild);
createtree(t->rchild);
}// getchar();
} // 建立二叉樹結束
void xianxu(bitree t,sqstack1 &s) // 先序非遞迴遍歷,採用的是儲存右孩子的位址通過棧實現
else
exit(0);
while(t || !emptystack1(s)) // 迴圈終止條件
else
pop1(s,t); }}
void cengci(bitree t,queue &q)
binode *p,*s;
s=p=q.front;
enqueue(q,t);
while(p != q.rear)
printf("層次遍歷為:\n");
while(s < q.rear)
}最後就是定義主函式函式呼叫了,包含於標頭檔案main_gercs.cpp中
#include"t11.h"
#include"gercs.h"
#include"gercs.cpp"
void main()
*/createtree(s);
xianxu(s,q);
printf("\n");
cengci(s,u);
printf("\n");
}最後上傳一張程式
程式的注釋由於自己剛編寫的,沒有及時加上,等自己有時間加上詳細注釋,現在做了這麼多得實驗,發現學了資料結構,不僅自己對語言的熟練程度變得更深了,而且程式設計思想和以前完全不一樣了,程式的設計很快就可以完成。遇到的困難也會解決,相信只要自己不斷深入學習對這方面的理解就會變得更深刻。自己也是乙個意志堅強的男孩,只要有困難一定會有解決的辦法。留住最真的於2012.04.25.18:46寫。~~~~~~~~~~~~~~~~~~~~~~~~~~~
根據廣義表構建二叉樹
如果用陣列形式建樹進行的話很簡單,表面上就不需要用到棧的知識,也比較容易想到,用結構體建樹的方法就要不斷push,pop啊然後感覺一下想不出什麼時候push,pop,或者push pop 什麼,給個樣例 陣列建樹是這樣的開始說明a i 的左兒子a 2 i 1 右兒子a 2 i 2 a b d c 用...
二叉樹 48 二叉樹 二叉樹的高度
目的 使用c 模板設計並逐步完善二叉樹的抽象資料型別 adt 內容 1 請參照鍊錶的adt模板,設計二叉樹並逐步完善的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材 課件,以及網盤中的鍊錶...
二叉樹(一) 建立二叉鍊錶儲存的二叉樹
二叉樹的儲存分為順序儲存和鏈式儲存 順序儲存 對於滿二叉樹是非常方便的,沒有空間的浪費,又可以很方便的計算出每乙個結點的左 右孩子及其雙親的下標位置,但是一般的二叉樹不能連續的儲存在一維空間中,所以空結點就占用了一定的空間。二叉樹的順序儲存結構 define max 100 typedef stru...