資料結構 筆記:樹形結構的層次遍歷
阿新 • • 發佈:2018-11-14
如果按層次遍歷通用樹結構中的每一個數據元素?
當前的事實
-樹是非線性的資料結構,樹的結點沒有固定的編號方式
新的需求
-為通用樹機構提供新的方法,快速遍歷每一個結點
設計思路(遊標)
-在樹中定義一個遊標(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 |
... | ... | ... |
總結:
-樹的結點沒有固定編號方式
-可以按照層次關係對樹中的結點進行遍歷
-通過遊標的思想設計遍歷成員函式
-遍歷元素函式是互相依賴,互相配合的關係
-遍歷演算法的核心為佇列的使用