樹 通用樹的層次遍歷

2022-08-18 01:00:19 字數 1270 閱讀 2333

1,為何及如何按層次遍歷通用樹中的每乙個資料元素?

1,通用樹結構是一種容器型別的樹結構,其用來裝資料元素,所以應該提供一種方法來遍歷樹中的每乙個資料結構;

2,往下分析;

2,當前的事實:

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

1,也就不能像鍊錶一樣統一編號來訪問;

3,新的需求:

1,為通用樹結構提供新的方法,快速遍歷每乙個結點;

4,設計思路(游標):

1,在樹中定義乙個游標(gtreenode*);

2,遍歷開始前將游標指向根結點(root());

3,獲取游標指向的資料元素;

4,通過結點中的 child 成員移動游標;

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

5,層次便利演算法:

1,原料:class linkqueue;

2,游標:linkqueue::front();

3,思想:

1,begin() ==> 將根結點壓入佇列中;

2,current() ==> 訪問隊頭元素指向的資料元素;

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

4,end() ==> 判斷佇列是否為空;

6,層次遍歷演算法示例:

7,層次遍歷演算法**實現:

1

bool begin() //

為樹中結點的遍歷做初始化210

11return

ret;12}

1314

bool end() //

佇列長度為 0 則樹遍歷結束

1518

19bool next() //

隊頭元素彈出來,隊頭元素的孩子壓入佇列,同時指標一直指向下乙個結點

2032}33

34return

ret;35}

3637 t current() //

返回當前游標所指向的結點的元素

3843

else

4447   }

8,小結:

1,樹的結點沒有固定的編號方式;

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

3,通過游標的思想設計遍歷成員函式;

4,遍歷成員函式是互相依賴,相互配合的關係;

5,遍歷演算法的核心為佇列的使用;

樹的層次遍歷

include includeusing namespace std 結點權值作為結點編號 int postorder 31 後序遍歷結點 int inorder 31 中序遍歷結點 int leftnodes 31 儲存某結點的左子樹編號 int rightnodes 31 儲存某結點的右子樹編號...

樹的層次遍歷和確定層次問題

還是很簡單的 public void levelorder node root if node.getright null 層次遍歷有些演算法題會考,需要確定層次問題 public void levelorder node root if node.getright null size 大while...

層次遍歷2叉樹

修改日期 2009.5.26 修改人 吳強 修改原因 從前寫的 不夠規範 輸入要求 先序遍歷順序輸入各節點,號為空節點 例子 abd.ce.g.f.include include include include define max 50 鏈式二叉樹結構 typedef struct btree b...