二叉樹前序中序後序的非遞迴遍歷

2021-08-21 18:05:15 字數 854 閱讀 2749

1前序遍歷

按照根左右的順序進行遍歷,首先訪問根節點,若左孩子非空,訪問左子樹;右孩子非空訪問右子樹。以此規則遍歷整個二叉樹

(1)當前點入棧,輸出該節點

(2)如當前節點左孩子非空,訪問該節點的左孩子回到(1)

(3)若當前節點左孩子為空,訪問該節點右孩子回到(1)

stacks;

vectorres;

treenode *p=root;

while(p!=null||!s.empty())

if(!s.empty())

}

2中序遍歷

和前序遍歷思路一樣,只不過當左孩子為空才訪問當前節點

(1)當前點入棧

(2)如當前節點左孩子非空,訪問該節點的左孩子回到(1)

(3)若當前節點左孩子為空,輸出該節點並訪問該節點右孩子回到(1)

stacks;

vectorres;

treenode *p=root;

while(p!=null||!s.empty())

if(!s.empty())

}

3後序遍歷

按照左右根的順序遍歷二叉樹,對於任一節點,若無左右孩子或者左右孩子均已訪問,才可輸出。同時為保證先輸出左孩子,應先處理右子樹。

stacks;

vectorres;

treenode *p=root;

treenode *pre=null; //前一節點

while(!s.empty())

else

}

二叉樹 前序遍歷 中序遍歷 後序遍歷

前序遍歷 dlr 是二叉樹遍歷的一種,也叫做先跟遍歷,先序遍歷,前序周遊,可記做根左右。前序遍歷首先訪問根節點然後遍歷左子樹,最後遍歷右子樹。前序遍歷首先訪問根節點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根節點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹為空則結束返回,否則 1 ...

二叉樹前序 中序 後序遍歷非迭代解法

經常會有面試官,讓你手撕二叉樹的前序 中序 後序遍歷,當你簡單得寫了遞迴的方法,前序和中序遍歷,解決方法類似,都是使用棧解決的。後序遍歷稍微複雜一點。二叉樹前序遍歷 class solution p stack.pop p p.right return list 二叉樹中序遍歷 class solu...

二叉樹前序,中序,後序遍歷詳解

只要是搞計算機的,對資料結構中二叉樹遍歷都不陌生,但是如果用到的機會不多那麼就會慢慢淡忘,溫故而之新才是最好的學習方式,現在就重新溫習一下這方面的知識。首先我想先改變這幾個遍歷的名字 前根序遍歷,中根序遍歷,後根序遍歷 前中後本來就是相對於根結點來說的,少乙個字會產生很多不必要的誤解。1.前根序遍歷...