※当サイトは、アフィリエイト広告を利用しています。

[Leetcodeやるお]105.Construct Binary Tree from Inorder and Postorder Traversal

スポンサーリンク




Leetcodeの学習メモです。みんな大好きBinary Tree!

Input:
inorder = [9,3,15,20,7],
postorder = [9,15,7,20,3]

があって、Binary Treeを構築しなさいよ、という問題です。
inorderはLeft-> Node -> Rightという順番、postorderはLeft->Right->Nodeという順番です。(いっつも忘れるけども)

最終目標となる、Outputは [3,9,20,null,null,15,7]です。

アプローチ

PostOrderの最後には必ずrootが入るので利用できます。
postorder = [9,15,7,20,3]がrootになります。

ここでinorderをみます

inorder = [9,3,15,20,7],

inorderの中で3(root)より前に存在するものが、rootの左側のnodeということになります。この場合だと9がrootに対して左のnodeになります。

inorder = [9,3,15,20,7],
inorderでは左にあるものの数が小さくなります。

inorder = [9,3,15,20,7],
postorder = [9,15,7,20,3]

ここで、9がrootに対して左にある単一のnodeだとわかりました。問題は

inorder = [9,3,15,20,7],
postorder = [9,15,7,20,3]

青のサブノードの部分ですね。

inorder = [15,20,7],
postorder = [15,7,20]

同じようにpostorderの末尾を見ると20がrootであることがわかります。そこでinorderから20を探し、15が左のnode,7が右のnodeであることがわかります。

これを利用して再帰的なfunctionを利用してBinary Treeを構築していきます。
Nodeになる箇所を特定して、左なり右なりのノードに分けて、同じことを繰り返していきます。

なんやねんこれまじで、辛いですね。それでは。


スポンサーリンク


スポンサーリンク