创建的二叉树后续非递归遍历结果为_一入递归深似海,从此offer是路人
前言
今天我們來總結二叉樹的前中后序以及層次遍歷的遞歸與非遞歸的寫法。我們都知道二叉樹遍歷的遞歸寫法很簡單,但是面試的時候面試官往往考察的不是我們遞歸的寫法,他們滿懷期待你寫出非遞歸的解法,而當你只會寫遞歸方法時,offer已經與你漸行漸遠了。
下面先一起來看一下二叉樹各種遍歷的順序:
前序遍歷:根結點 —> 左子樹 —> 右子樹(先遍歷根節點,然后左右)
這棵樹的前序遍歷為:ABDEGHCF
中序遍歷:左子樹—> 根結點 —> 右子樹(在中間遍歷根節點)
這棵樹的中序遍歷為:DBGEHACF
后序遍歷:左子樹 —> 右子樹 —> 根結點(最后遍歷根節點)
這棵樹的后序遍歷為:DGHEBFCA
層次遍歷:按層次遍歷
這棵樹的層次遍歷為:ABCDEFGH
ps: 所謂的前序、中序、后續,就是對根節點而言的,左右的遍歷順序不變,前序就是根節點最先遍歷,然后左右;中序就是把根節點放在中間遍歷;后序則是把根節點放在最后遍歷。
https://blog.csdn.net/qq_42651904/article/details/90288715
文章目錄
- 前言
- 一、前序遍歷
- 1.遞歸解法
- 2.非遞歸方法(棧)
- 二、中序遍歷
- 1.遞歸解法
- 2.非遞歸方法(棧)
- 三、后序遍歷
- 1.遞歸解法
- 2.非遞歸方法(棧)
- 四、層次遍歷
- 1.非遞歸解法(隊列)
- 總結
一、前序遍歷
1.遞歸解法
代碼如下:
class2.非遞歸方法(棧)
前序遍歷是中左右,每次先處理的是中間節點,先將跟節點放入棧中,然后將右孩子加入棧,再加入左孩子。(因為棧的特性是先入后出,所以要先加入右孩子,再加入左孩子)
代碼如下:
class二、中序遍歷
1.遞歸解法
代碼如下:
class2.非遞歸方法(棧)
中序遍歷是左中右,每次先從根節點開始,一直遍歷左子節點,并在遍歷過程中將其入棧,然后取出棧頂元素,再指向右孩子。
代碼如下:
class三、后序遍歷
1.遞歸解法
代碼如下:
class2.非遞歸方法(棧)
后序遍歷是左右中,而先序遍歷是中左右,那么我們只需要調整一下先序遍歷的代碼順序(棧內先入左孩子,再入右孩子:這樣出棧為“右左中”),最后反轉res數組(得到“左中右”)。
代碼如下:
class四、層次遍歷
1.非遞歸解法(隊列)
層次遍歷算法思想:
用一個隊列保存被訪問的當前節點的左右孩子以實現層次遍歷。
在進行層次遍歷的時候,設置一個隊列結構,遍歷從二叉樹的根節點開始,首先將根節點指針入隊列,然后從隊頭取出一個元素,每取一個元素,執行下面兩個操作:
代碼如下:
class總結
以上就是二叉樹前中后以及層次遍歷的遞歸與非遞歸寫法了,喜歡的就點個贊同和關注吧!!!
總結
以上是生活随笔為你收集整理的创建的二叉树后续非递归遍历结果为_一入递归深似海,从此offer是路人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: waves效果器_盘点Waves的12款
- 下一篇: python语言的单行注释以井号开头_推