Morris遍歷(二叉樹)

2021-10-09 17:59:20 字數 1306 閱讀 6115

對於每乙個節點來說:

對於上面這副圖來說,整個過程:

進入節點5    構建 4 -> 5右連線

進入節點3 構建 1 -> 3右連線

進入節點1 列印1 通過 1 -> 3 連線進入3

進入節點3 第二次進入3,列印3

進入節點4 列印4 通過 4 -> 5 連線進入5

進入節點5 第二次進入5, 列印5

注意:中序遍歷利用右子節點

**:

public

void

inordermorris

(treenode node)

// 左子樹不為空 則尋找左子樹最右子節點作為前驅節點

treenode pre = node.left;

while

(pre.right != null && pre.right != node) pre = pre.right;

// 如果前驅節點還沒有連到本節點

前序遍歷與中序類似,中序是通過右子節點的連線來向後遍歷,而前序遍歷可以通過左子節點的連線來遍歷。

對於每乙個節點來說:分為三個步驟

對於上面這副圖來說,整個過程:

進入節點5    列印5

進入節點3 列印3 構建 1 - > 4 左連線

進入節點1 列印1 通過 1 -> 4 連線進入4

進入節點4 列印4

public

void preordermorris (treenode node)

if(pre.left != null && pre.left != node.right)

break;}

pre.left = node.right;

}// 前序遍歷 用左連線下乙個

node = node.left;

}}

Morris遍歷二叉樹

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

二叉樹Morris遍歷

給定乙個n個節點的二叉樹,完成前 中 後序遍歷,要求時間複雜度為o n 額外空間複雜度為o 1 二叉樹遞迴 非遞迴遍歷 1 如果當前節點的左子樹為空,則當前節點向右移動 2 如果當前節點的左子樹不為空,則找到左子樹上最右的節點 a.如果最右節點的右孩子為空,則將最右節點的右孩子指向當前節點,當前節點...

Morris演算法遍歷二叉樹

中序遍歷 演算法步驟 1 如果當前節點的左子節點為空,則輸出當前節點,並將當前節點置為該節點的右子節點。2如果當前節點的左子節點不為空時,則找到當前節點左子樹的最右節點 該節點為當前節點中序遍歷的前驅節點 a 如果最右節點的右指標為空,則將最右節點的右指標指向當前節點,並把當前節點置為其左子節點。b...