前序,中序,後續非遞迴遍歷樹的標準演算法

2021-05-23 01:11:47 字數 329 閱讀 5627

在中國原始碼網上發現了這三個演算法,據說是標準演算法,演算法的整體思想就是(以中序為例):

1、先設乙個棧s和乙個指向樹根的指標p,用p指指向結點的lchild並順其而下直到p==null跳出迴圈,在這一過程中把從根節點到最左節點過程中經過的每個結點(包括最左結點)入棧,則此時的p指向的是樹的最左結點。             

2、棧頂元素出棧以訪問最左結點

3、訪問最左結點的根結點。

4、由於將右子樹理解為乙個子樹,對其的遍歷也是採用中序遍歷的方法,故將右子樹的根結點理解為開始遍歷樹時的根結點,故可用語句p=p->rchild,則又開始了對乙個樹的遍歷,p指標又會走遍右子樹的每乙個結點

資料結構 樹的前序 中序 後續遍歷的非遞迴寫法

理解的精髓在於用 棧 來取代遞迴,出棧的操作其實就相當於某層遞迴的出口 前序遍歷 用棧來替代遞迴的過程 因為遞迴歸根到底也是用棧來實現的 考慮遞迴的時候 每進入乙個遞迴都會往左子樹試探,因此一直往左子樹走到頭,遇到乙個節點就訪問它 然後壓入棧中 訪問完左子樹之後再回過頭繼續對每個節點的右子樹進行 遞...

前序中序後序遍歷遞迴非遞迴實現

根 左兒子 右兒子 definition for binary tree struct treenode void preorder treenode root,vector v 非遞迴遍歷時就是模擬棧,注意入棧順序即可 void preorder treenode root,vector v 左二...

C 前序中序後序非遞迴遍歷

前序遍歷 根左右 迴圈到左子樹空,else轉右子樹,當乙個結點已經訪問右子樹時,該結點出棧 include include include include includeusing namespace std struct treenode class solution 左子樹到底了 else re...