前序遍歷定義:
先訪問curNode姻僧,再訪問 left subtree规丽,再訪問right subtree
思路:
類似inorder traversal蒲牧,根據(jù)前序遍歷的定義,利用stack來替代recursion赌莺。
關(guān)鍵:
- stack的意義是冰抢?
既然stack的方法可以替代recursion的方法,那么stack一定實現(xiàn)了recursion中的某個功能艘狭。什么功能呢挎扰?backtrack!
試想一下巢音,當訪問完左子樹之后需要訪問右子樹遵倦,那么怎么才能夠從左子樹的最后一個被訪問節(jié)點跳到右子樹的第一個節(jié)點?
利用Stack官撼,可以先將右子樹的第一個節(jié)點壓到棧底梧躺,當左子樹的節(jié)點被完全訪問之后,說明棧中已無左子樹的節(jié)點傲绣,棧頂節(jié)點即為右子樹的第一個節(jié)點掠哥。
因此,stack中節(jié)點的的意義是:
- 棧頂的節(jié)點是下一個要訪問的節(jié)點
- 位于頂端的比位于底端的節(jié)點先得到訪問
- 已訪問的節(jié)點已出棧
- 后訪問的節(jié)點可能在棧中或者還未被加到棧中