Morris 遍歷學習筆記

2021-10-25 09:29:51 字數 531 閱讀 2598

morris遍歷是實現了時間複雜度o(n),空間複雜度只有o(1)的二叉樹遍歷的一種方法,它實現的方法主要為每個節點只遍歷一次,具體規則如下:

個人感覺morris的本質就是將原先的單向遍歷加入了回溯,即有左子樹的節點在遍歷完左子樹後還可以再返回該節點,並向右繼續遍歷,也即實現了有左子樹的節點只遍歷2次,無左子樹的節點只遍歷一次。

public

static

void

morrispre

(node head)

node cur = head;

node mostright = null;

while

(cur != null)

if(mostright.right == null)

else

}else

cur = cur.right;

} system.out.

println()

;}

引用自

Morris 中序遍歷

morris 中序遍歷是另一種遍歷二叉樹的方法,它能將非遞迴的中序遍歷空間複雜度降為 o 1 如果 x 無左孩子,先將 xx 的值加入答案陣列,再訪問 xx 的右孩子,即 x x.textitx x.right。如果 xx 有左孩子,則找到 xx 左子樹上最右的節點 即左子樹中序遍歷的最後乙個節點,...

經典演算法 Morris遍歷

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

Morris遍歷二叉樹

morris遍歷的實質就是避免用棧結構,而是讓下層到上層有指標,具體是通過讓底層節點指向null的空閒指標指回上層的某個節點,從而完成下層到上層的移動。中序遍歷的過程如下 1.假設當前子樹的頭節點為h,讓h的左子樹中最右節點的right指標指向h,然後h的左子樹繼續步驟1的處理過程,直到遇到某乙個節...