NC45實現二叉樹先序 中序和後序遍歷

2021-10-10 02:42:46 字數 998 閱讀 2217

題目位址

如標題,實現二叉樹的三序遍歷。

輸入:1, 2, 3

輸出:[[1, 2, 3], [2, 1, 3], [2, 3, 1]]

輸出的陣列就是[前、中、後]序的遍歷。

前序遍歷

中序遍歷

後序遍歷

這裡主要使用morris演算法進行三序遍歷。

morris 演算法是一種迭代版本的遍歷,使用了樹中空閒的指標,因此不需要使用額外空間(o(1)),且morris演算法能在一次遍歷中同時完成三序遍歷,三序的區別只是訪問節點內容的時機不同。

三序遍歷各自的morris演算法實現也在上面的鏈結中,下面的**是整合版本。

js **如下:

function

threeorders

( root )

for(

let i = len-count, j = len-

1; i < j; i++

, j--)}

;while

(root)

if(pre.right)

else

}else

// 此時可能是借助最右下節點返回父節點的過程,也可能是普通的向右子樹遍歷

// 還有可能是剛遍歷完左子樹,需要往右子樹遍歷,也就是從上面的 1 處執行下來的

inorder.

push

(root.val)

; root = root.right;

}addpath

(r);

return

[preorder, inorder, postorder]

;}

先序中序重建二叉樹

includeusing namespace std vectorpre,in int p typedef struct node vectorpost int rec int l,int r 通過前序和後序得到樹 int main for int i 0 i tem in.push back te...

先序中序轉二叉樹

在紙上計算一下他們轉的過程就很容易發現規律 寫程式更簡單,只需要計算出每個子樹的起始位置 計算的時候使用靜態鍊錶更為方便 include include include include include using namespace std struct node vector int in,pre...

二叉樹 先序 中序 後序

同學整理的,順便傳上分享下 一,已知先序和中序 求後序 1 include2 include3 include4 using namespace std 5char s1 10 s2 10 ans 10 6 int o 0 7 void tree int n char s1 char s2 char...