Morris 中序遍歷

2021-10-09 10:32:13 字數 513 閱讀 7583

morris 中序遍歷是另一種遍歷二叉樹的方法,它能將非遞迴的中序遍歷空間複雜度降為 o(1)。

如果 x 無左孩子,先將 xx 的值加入答案陣列,再訪問 xx 的右孩子,即 x = x.\textitx=x.right。

如果 xx 有左孩子,則找到 xx 左子樹上最右的節點(即左子樹中序遍歷的最後乙個節點,xx 在中序遍歷中的前驅節點),我們記為 predecessor。根據 predecessor 的右孩子是否為空,進行如下操作。

重複上述操作,直至訪問完整棵樹。

**:

class solution 

// 讓 predecessor 的右指標指向 root,繼續遍歷左子樹

if (predecessor.right == null)

// 說明左子樹已經訪問完了,我們需要斷開鏈結

else

}// 如果沒有左孩子,則直接訪問右孩子

else

}return res;

}}

Leetcode501 Morris中序遍歷

一般二叉樹的中序遍歷需要用到遞迴演算法,在遞迴過程中,程式會自動使用遞迴棧,保證了我們可以在遍歷完左子樹後,返回到當前節點繼續後面的遍歷。但是遞迴棧也占用了部分空間,因此出現morris中序遍歷方法,使得我們中序遍歷的空間複雜度變為o 1 即與樹的深度無關。我們結合leetcode中第501題二叉搜...

Morris 遍歷學習筆記

morris遍歷是實現了時間複雜度o n 空間複雜度只有o 1 的二叉樹遍歷的一種方法,它實現的方法主要為每個節點只遍歷一次,具體規則如下 個人感覺morris的本質就是將原先的單向遍歷加入了回溯,即有左子樹的節點在遍歷完左子樹後還可以再返回該節點,並向右繼續遍歷,也即實現了有左子樹的節點只遍歷2次...

經典演算法 Morris遍歷

內容 1 什麼是morris遍歷 2 morris遍歷規則與過程 3 先序及中序 4 後序 5 morris遍歷時間複雜度分析 1 什麼是morris遍歷 關於二叉樹先序 中序 後序遍歷的遞迴和非遞迴版本,在這裡有詳細 明顯這6種遍歷演算法的時間複雜度都需要 o h h 為樹高 的額外空間複雜度 另...