題目位址
如標題,實現二叉樹的三序遍歷。
例
輸入: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...