資料結構 二叉樹的建立與遍歷

2021-10-10 18:13:41 字數 2517 閱讀 6543

二叉樹的建立採用struct指標建立結點,每個結點內建兩個struct指標來指向它的左右孩子,其中建立方法可採用先序,中序、後序。這裡僅介紹先序建樹,中序建樹和後序建樹實際上殊途同歸。

建樹**如下

typedef struct node

btree,

*btree;

void

build

(btree &t)

/** * @description: 建樹

* 採用先序建樹,先根後左右

* @param

*/else

t =null

;}

這邊先簡單敘述一下二叉樹的先序、中序、後序遍歷的遞迴方法。首先對於先序遍歷,採用根左右的順序輸出,所以每遇到乙個結點就先輸出它對應的值,再先遞迴它的左孩子然後遞迴它的右孩子。

**如下

void

pre_rec

(btree t)

/** * @description: 遞迴先序遍歷二叉樹

* @param

*/}void

in_rec

(btree t)

/** * @description: 遞迴中序遍歷二叉樹

* @param

*/}void

post_rec

(btree t)

/** * @description: 遞迴後序遍歷二叉樹

* @param

*/}

先序遍歷的非遞迴方法: 從根結點開始往左孩子方向遍歷,每遍歷到乙個元素就把它對應的值輸出,然後將該結點入棧,直至左孩子為空,然後彈出棧頂結點,遍歷其右子樹,如此往復直至棧空且結點為空。

void

pre_transe

(btree ti)

/** * @description: 非遞迴先序遍歷二叉樹

* 從根結點開始往左孩子方向遍歷,每遍歷到乙個元素就

* 把它對應的值輸出,然後將該結點入棧,直至左孩子為

* 空,然後彈出棧頂結點,遍歷其右子樹,如此往復直至

* 棧空且結點為空。

* @param

*/if

(!s.

empty()

)}}

非遞迴中序遍歷二叉樹 從根結點開始往左孩子方向遍歷,然後將該結點入棧,直至左孩子為空,然後彈出棧頂結點並輸出該結點對應的元素的值,接著遍歷其右子樹如此往復直至棧空且結點為空。

void

in_transe

(btree ti)

/** * @description: 非遞迴中序遍歷二叉樹

* 從根結點開始往左孩子方向遍歷,然後將該結點入棧,

* 直至左孩子為空,然後彈出棧頂結點並輸出該結點對

* 應的元素的值,接著遍歷其右子樹如此往復直至棧空

* 且結點為空。

* @param

*/if

(!s.

empty()

)}}

非遞迴後序遍歷二叉樹從根節點開始順序遍歷其左孩子,並將每個順序遍歷到的左孩子入棧同時標記其入棧次數,當左孩子為空 時,彈出棧頂元素,判斷棧頂元素入棧次數,若為2則輸出棧頂元素對應的值,並將棧頂結點置為空,避免陷入死迴圈,若為1,則將該節點再次入棧,並自增其入棧次數,然後遍歷其右子樹,如此往復,直至棧空且結點為空。

void

post_transe

(btree ti)

/** * @description: 非遞迴後序遍歷二叉樹

* 從根節點開始順序遍歷其左孩子,並將每個順序遍歷

* 到的左孩子入棧同時標記其入棧次數,當左孩子為空

* 時,彈出棧頂元素,判斷棧頂元素入棧次數,若為2則

* 輸出棧頂元素對應的值,並將棧頂結點置為空,避免

* 陷入死迴圈,若為1,則將該節點再次入棧,並自增其

* 入棧次數,然後遍歷其右子樹,如此往復,直至棧空

* 且結點為空。

* @param

*/if

(!s.

empty()

)else}}

}}

層序遍歷二叉樹將根節點入隊後,逐一彈出隊首元素輸出它對應的值並將隊首元素的左右孩子入隊,如此往復,直至隊空

void

level_transe

(btree t)

/** * @description: 層序遍歷二叉樹

* 將根節點入隊後,逐一彈出隊首元素輸出它對應的值

* 並將隊首元素的左右孩子入隊,如此往復,直至隊空

* @param

*/}}

資料結構 二叉樹 建立與遍歷

一 題目描述 二叉樹的建立與遍歷 binary tree 題目描述 給出一棵二叉樹,分別輸出先序 中序 後序遍歷結果。輸入 第1行 結點數n 1 n 100 以下若干行,每行3個整數,分別表示父結點 左孩子 右孩子。若沒有孩子,對應的整數為0.輸出 第1行 樹根 第2行 先序遍歷結果,數字間用1個空...

資料結構 二叉樹的遍歷與建立

所有節點都只有左子樹的稱為左斜樹 在一棵二叉樹中,如果所有分支節點都存在左子樹和右子樹,並且所有 葉子都在同一層上 這樣的二叉樹被稱為滿二叉樹。二叉樹的建立 struct node node createbinarytree node node return node 前序,後序,中序,層序遍歷 v...

資料結構二叉樹的建立與遍歷

如下 include include using namespace std struct treepoint 建立二叉樹鍊錶 void createtree struct treepoint t else 二叉樹建立 void printf char data,int level 訪問二叉樹結點資...