來玩二叉樹 NO 1 之遍歷演算法

2021-10-03 22:12:56 字數 2156 閱讀 5754

樹是一種非線性的資料結構,相對於線性的資料結構(鍊錶、陣列)而言,樹的平均執行時間更短(往往與樹相關的排序時間複雜度都不會高)

總結:

順序結構主要有四種型別,順序表(陣列),鍊錶,佇列,棧(特殊的線性結構,棧是一種操作限定在表尾部進行的線性表,表尾稱為棧頂,另一端固定不動,稱為棧底)

傳統的樹作為一種應用廣泛的一對多非線性資料結構,不僅有資料間的指向關係,還有層級關係(父子關係,葉子關係是最大特點),因傳統樹的結構比較複雜,為了簡化操作及儲存,我們一般將樹轉換為二叉樹處理

總結:

二叉樹是由若干個node組成,乙個node維護乙個元資料和兩個指向其他node的指標,相互連線在一起就形成二叉樹。

定義乙個treenode類,代表樹結構

*

** 代表二叉樹結構 **

@author 張江豐 **

/public

class

treenode

}

以下圖二叉樹建立為例

根據圖例建立節點並連線

public

static

void

main

(string[

] args)

; treenode treenode =

newtreenode(10

);treenode treenode2 =

newtreenode(8

);treenode treenode3 =

newtreenode(20

);treenode treenode4 =

newtreenode(15

);treenode treenode5 =

newtreenode(30

);// 設定根節點,左兒子節點

treenode.

setleftnode

(treenode2)

;// 設定根節點,右兒子節點

treenode.

setrightnode

(treenode3)

;// 設定20節點的左兒子節點

treenode3.

setleftnode

(treenode4)

;// 設定20節點的右兒子節點

treenode3.

setrightnode

(treenode5)

;}

遍歷二叉樹的三種方式
// 先序遍歷

public

static

void

befotree

(treenode tree)

befotree

(tree.

getleftnode()

);befotree

(tree.

getrightnode()

);}}

根據先序遍歷的順序(根->左->右),輸出結果應該為10-8-20-15-30

// 中序遍歷

public

static

void

bettree

(treenode tree)

}

根據中序遍歷的順序(左->根->右),輸出結果應該為8-10-15-20-30

// 後序遍歷

public

static

void

aftertree

(treenode tree)

}

根據後序遍歷的順序(左->右->根),輸出結果應該為8-15-30-20-10二叉樹的簡單入門完成了,後續更新二叉樹的其他知識點,希望通過部落格記錄對自己和大家有所幫助。

二叉樹遍歷演算法

二叉樹是一種非線性的資料結構,在對它進行操作時,總是需要逐一對每個資料元素實施操作,這樣就存在乙個操作順序問題,由此提出了二叉樹的遍歷操作。所謂遍歷二叉樹就是按某種順序訪問二叉樹中的每個結點一次且僅一次的過程。這裡的訪問可以是輸出 比較 更新 檢視元素內容等等各種操作。在這裡寫了個二叉樹遍歷演算法 ...

二叉樹遍歷之遞迴演算法

3 920 157 二叉樹定義和輔助函式如下 cpp view plain copy struct node void visit intdata 先序遍歷 先訪問二叉樹的根結點,而後遍歷左子樹,最後遍歷右子樹。先序遍歷二叉樹例項結果為 3 9 20 15 7。遞迴演算法 如下 cpp view p...

廣度遍歷二叉樹和深度遍歷二叉樹演算法

二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...