使用C 建立乙個二叉樹

2021-09-11 07:40:35 字數 1623 閱讀 5951

由於在二叉樹的建立過程中,我們需要使用輸入/讀取的值來判定二叉樹是否有左節點或者右節點。因此我們在建立的時候就需要使用指標的引用或者二重指標。

我們定義二叉樹的基本結點形式如下所示:

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 這裡叫...