鏈表的角度看待二叉樹

鏈表的角度看待二叉樹

  • 鏈表節點的本質就是一種帶“一個同類指針”的對象。

  • 二叉樹節點的本質就是一種帶“兩個同類指針”的對象。

  • 爲了不干擾我們對核心問題的研究。不考慮“不允許環形指向”這個約束。

  • 我們很少爲鏈表建立棧實現遍歷,因爲專門爲鏈表建立輔助棧的利用率不高,容易造成空間O(n)的浪費。

  • 而我們經常會爲二叉樹,建立輔助棧,輔助棧的長度等於數的深度。

  • 我們可以把二叉樹看成多個分叉的鏈表。我們可以把樹中的任意一個節點看作是鏈表的終點值。把根看作鏈表的起點值。尤其是利用迭代法實現二叉樹的遍歷時。

  • 我們最好站在節點的視角來編程,而不是鏈表結構或者樹形結構的角度。因爲無論是迭代算法還是遞歸算法,我們處理的對象都是節點,而不是樹或者鏈表集合。我們通常是“對節點遞歸”,而不是“對樹遞歸”。

  • 如果是迭代鏈表節點,當前節點有3個去處,1.處理當前值,2.利用pre指針訪問前節點(或者利用棧),3.訪問next節點。

  • 如果是迭代二叉樹節點,當前節點有4個去處,1.處理當前值,2.利用棧訪問前節點(pre指針區分來源,是左子節點還是右子節點)。3.訪問左子節點,4,訪問右子節點。

  • 其實整個遞推回溯過程乍一看有點像動態規劃。遞推就好像在爲初始化回溯過程做準備。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章