由於在二叉樹的建立過程中,我們需要使用輸入/讀取的值來判定二叉樹是否有左節點或者右節點。因此我們在建立的時候就需要使用指標的引用或者二重指標。
我們定義二叉樹的基本結點形式如下所示:
為了方便理解,我們來捋一遍使用二重指標在建立二叉樹時的過程。typedef int elemtype;
struct node
;typedef node* node;
首先,我們定義了乙個結構體node
之後,我們有乙個指向這個結構體的結構體指標node
最後,我們有乙個指向這個結構體指標的二重指標node*
在我們建立的時候,若二叉樹某個結點為空,那我們就令 node* 指向的那個 node 為空。而如果 node 的值是空的,那麼自然就沒有結構體 node 的地方了,這個結點就相當於沒有了。
那麼有人可能會問,那我直接令 node 為空不行嗎。答案是不行的,因為你在使用遞迴法建立二叉樹的時候,所改變的引數就是 node 這個指標,也就是操作 node 這個指標資料型別和操作其他的 int 等資料型別原理是一樣的。如果直接進行傳遞,就相當於傳遞了形參,並無法將二叉樹聯絡在一起,反而會造成漫山遍野的野指標。
我們可以簡單記,操作什麼型別資料,就傳遞高一級別的指標。
使用指標的引用原理極為簡單,我們也可以用這種方法。
void ini_btree2(node* t)
else
}
一般來講,二叉樹有三種遍歷方法,分別是先序中序和後序。void ini_btree(node &t)
else
}
先序演算法步驟為:
① 訪問根結點;
② 先序遍歷根結點的左子樹;
③ 先序遍歷根結點的右子樹;
中序演算法步驟為:
① 中序遍歷根結點的左子樹;
② 訪問根結點;
③ 中序遍歷根結點的右子樹;
後序演算法步驟為:
① 後序遍歷根結點的左子樹;
② 後序遍歷根結點的右子樹;
③ 訪問根結點;
以下面這個二叉樹為例,我們來說明一下中序演算法的遍歷步驟。對於乙個簡單的二叉樹,也就是只有根節點、左兒子右兒子的二叉樹(例如圖中的abc),中序遍歷的順序是bac。在二叉樹中,所有的結點都可以認為是簡單二叉樹的組合,那麼這樣,我們就可以得到:
hdibjeafcg
這樣乙個中序遍歷的二叉樹
//先序遍歷
void preorder(node t)
//中序遍歷
void inorder(node t)
//後序遍歷
void postorder(node t)
int count(node t)
如何建立乙個二叉樹?
用前序序列來建立乙個二叉樹,但單純用前序序列無法還原乙個二叉樹,我們還需要把空節點加入進去。這是一顆我網上隨便找的二叉樹,它的前序序列是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...
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...
c 二叉樹建立
二叉樹 就是首先得有乙個根節點.這個節點的入度為0也就是它只有子節點沒有父節點 如1號節點 每個節點又有乙個左兒子和乙個右兒子 當然也可以沒有 接下來就是建立.建立一棵樹得現有這棵樹的結點和樹根 首先來宣告乙個樹的結點 typedef struct node node 當然 int data 這裡叫...