由二叉樹定義得知,二叉樹的結點由乙個元素和分別指向其左、右子樹的兩個分支構成,則表示二叉樹的鍊錶中的結點至少包含3個域,如下圖。二叉樹建立
程式是如何建立出二叉樹的?(以下圖為例)
從主函式開始執行:定義乙個bitnode型別的指標root,將指標root的位址賦給t(t是乙個bitnode型別指標的指標)
然後執行creatbitree:
輸入a,輸入的不是空格,給t指向的指標即root開闢一段空間。此時:
然後將ch賦給t指向的指標的data。
然後執行creatbitree(&((*t)->lchild));
注意進入這層函式後t的指向
輸入bb不為空格給t指向的lchild指標開闢一段空間,並把b賦給新空間的data
然後執行creatbitree(&((*t)->lchild));
輸入空格,ch==空格執行*t = null;
執行creatbitree(&((*t)->rchild));
輸入空格,ch==空格執行*t = null;
返回上一層遞迴
執行creatbitree(&((*t)->rchild));
輸入空格,*t = null;
到此二叉樹建立完成
1.#define telemtype char
表示用telemtype char替換char
2.bitree是什麼意思?
用bitree代表bitnode *
例如:typedef int *bit
表示用bit替換int *這個型別,那麼bit a
代表定義乙個int型指標a,bit *b
表示定義乙個int型指標型的指標b。
3.getchar()的作用是什麼?
getchar由巨集實現:#define getchar() getc(stdin)。getchar有乙個int型的返回值。當程式呼叫getchar時.程式就等著使用者按鍵。使用者輸入的字元被存放在鍵盤緩衝區中。直到使用者按回車為止(回車字元也放在緩衝區中)。當使用者鍵入回車之後,getchar才開始從stdio流中每次讀入乙個字元。getchar函式的返回值是使用者輸入的字元的ascii碼,若檔案結尾(end-of-file)則返回-1(eof),且將使用者輸入的字元回顯到螢幕。如使用者在按回車之前輸入了不止乙個字元,其他字元會保留在鍵盤快取區中,等待後續getchar呼叫讀取。也就是說,後續的getchar呼叫不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完後,才等待使用者按鍵。本例中二叉樹為字元型所以需要在scanf("%c",&ch)後加一句getchar()否則第二次執行scanf時系統會把上一次快取區滯留的回車當作本次輸入的字元讀入
4.*t = (bitnode*)malloc(sizeof(bitnode));
是什麼意思?
上述**中t是乙個bitnode型別指標的指標,*t則表示t指向的那個指標,所以*t = (bitnode*)malloc(sizeof(bitnode));
表示給t指向的那個指標在記憶體裡開闢一段一定大小的空間。同理(*t).data = ch;
表示把ch的值賦給t指向的那個指標的data域。
二叉樹鏈式儲存結構
二叉樹的鏈式儲存結構是指,用鍊錶來表示一棵二叉樹,即用鏈來指示元素的邏輯關係。其中,data域存放某結點的資料資訊 lchild與rchild分別存放指向左孩子和右孩子的指標,當左孩子或右孩子不存在時,相應指標域值為空 用符號 或null表示 利用這樣的結點結構表示的二叉樹的鏈式儲存結構被稱為二叉鍊...
二叉樹的鏈式儲存結構(線索二叉樹)
一 鏈式儲存結構 由於順序儲存二叉樹的空間利用率較低,因此二叉樹一般都採用鏈式儲存結構,用鍊錶結點來儲存二叉樹中的每個結點。在二叉樹中,結點結構通過包括若干資料域和若干指標域,二叉鍊錶至少包含3個域 資料域 data 左指標域 lchild和右指標域 rchild,如下圖所示 其中,n 個結點的二叉...
二叉樹的鏈式儲存
實現二叉樹的基本操作 建立 遍歷 計算深度 結點數 葉子數等。輸入c,先序建立二叉樹,表示空節點 輸入h 計算二叉樹的高度 輸入l 計算二叉樹的葉子個數 輸入n 計算二叉樹節點總個數 輸入1 先序遍歷二叉樹 輸入2 中序遍歷二叉樹 輸入3 後續遍歷二叉樹 輸入f 查詢值 x的節點的個數 輸入p 以縮...