天天看點

樹的非遞歸周遊

   樹是遞歸定義的,利用遞歸算法周遊樹實作起來比較簡單,然而難的是非遞歸周遊。非遞歸周遊需要借助棧這一資料結構來完成。

首先定義樹的結點和建構連結清單棧:

建立樹:

周遊:

1.非遞歸前序周遊:

思想:(1)通路結點p,并将節點p進棧。如p的左孩子不為空,這将p的左孩子置為結點p,重複(1);若p的左孩子為空,這擷取棧頂值并出棧,棧頂結點的右孩子賦給p,重複(1),如棧為空且p==NULL,則周遊結束。

2.非遞歸中序周遊:

思想:

對于任意結點p

(1)若左孩子不為空,則将p進棧并将p的左孩子置為目前的p,然後對目前結點p進行同樣處理。

(2)若左孩子為空,這通路該結點,并将棧頂元素出棧且将p置為棧頂元素的右孩子,進行(1)操作。

(3)知道p為空且棧頂元素為空時周遊結束。

繼續閱讀