1. 程式人生 > >資料結構 筆記:樹形結構的層次遍歷

資料結構 筆記:樹形結構的層次遍歷

如果按層次遍歷通用樹結構中的每一個數據元素?

當前的事實

-樹是非線性的資料結構,樹的結點沒有固定的編號方式

新的需求

-為通用樹機構提供新的方法,快速遍歷每一個結點

設計思路(遊標)

-在樹中定義一個遊標(GTreeNode<T>*)

-遍歷開始前將遊標指向根節點(root())

-獲取遊標指向的資料元素

-通過結點中的child成員移動遊標

設計思路(遊標)

提供一組遍歷相關的函式,按層次訪問樹中的資料元素

函式 功能說明
begin() 初始化,準備進行遍歷訪問
next() 移動遊標,指向下一個結點
current() 獲取遊標所指向的資料元素
end() 判斷遊標是否到達尾部

層次遍歷演算法

-原料:class LinkQueue<T>;

-遊標:LinkQueue<T>::front();

-思想:

·begin() ->將根結點壓入佇列中

·current() ->訪問隊頭元素指向的資料元素

·next() ->隊頭元素彈出,將隊頭元素的孩子壓入佇列中(核心)

·end() ->判斷佇列是否為空

層次遍歷演算法示例

函式呼叫 佇列狀態 出隊結點
begin() A  
next() B,C,D A
next() C,D,E,F B
next() D,E,F,G C
next() E,F,G,H,I,J D
next() F,G,H,I,J,K,L E
next() G,H,I,J,K,L G
next() H,I,J,K,L, H
... ... ...

總結:

-樹的結點沒有固定編號方式

-可以按照層次關係對樹中的結點進行遍歷

-通過遊標的思想設計遍歷成員函式

-遍歷元素函式是互相依賴,互相配合的關係

-遍歷演算法的核心為佇列的使用