λ¬Έμ
νμ΄
μ€μ μν : 7 3 8 1 9 4 10 0 11 5 2 6
νμ μν : 7 8 3 9 10 4 1 11 5 6 2 0
νμ μνλ μ΅μμ 루νΈλ₯Ό 맨 λ§μ§λ§μ λ°©λ¬Ένλ©°,
μ€μ μνλ μΌμͺ½ μλΈ νΈλ¦¬, 루νΈ, μ€λ₯Έμͺ½ μλΈ νΈλ¦¬ μμΌλ‘ λ°©λ¬Ένλ€.
λ°λΌμ, νμ μνμ 맨 λ§μ§λ§ μμλ μ΅μμ 루νΈμ΄λ©°
μ΄λ₯Ό κΈ°μ€μΌλ‘ μ€μ μνλ₯Ό λλλ©΄, μΌμͺ½μ μΌμͺ½ μλΈ νΈλ¦¬, μ€λ₯Έμͺ½μ μ€λ₯Έμͺ½ μλΈ νΈλ¦¬μμ μ μ μλ€.
μ€μ μν : 7 3 8 1 9 4 10 0 11 5 2 6
νμ μν : 7 8 3 9 10 4 1 11 5 6 2 0
μ΄λ μ€μ μνμμ μΌμͺ½ μλΈ νΈλ¦¬μ λ²μλ
μμ μΈλ±μ€ ~ (μμ μΈλ±μ€ + μΌμͺ½ μλΈ νΈλ¦¬μ λ Έλ μ - 1)
μ€μ μνμμ μ€λ₯Έμͺ½ μλΈ νΈλ¦¬μ λ²μλ
(λ μΈλ±μ€ - μ€λ₯Έμͺ½ μλΈ νΈλ¦¬μ μ + 1) ~ λ μΈλ±μ€
νμ μνμμ μΌμͺ½ μλΈ νΈλ¦¬μ λ²μλ
μμ μΈλ±μ€ ~ (μμ μΈλ±μ€ + μΌμͺ½ μλΈ νΈλ¦¬μ λ Έλ μ - 1)
νμ μνμμ μ€λ₯Έμͺ½ μλΈ νΈλ¦¬μ λ²μλ
(λ μΈλ±μ€ - μ€λ₯Έμͺ½ μλΈ νΈλ¦¬μ μ) ~ (λ μΈλ±μ€ - 1)
μ½λ
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 5)
n = int(input())
inorder = list(map(int, input().split()))
postorder = list(map(int, input().split()))
nodeNum = [0] * (n + 1)
for i in range(n):
nodeNum[inorder[i]] = i
def preorder(inStart, inEnd, postStart, postEnd):
if (inStart > inEnd) or (postStart > postEnd):
return
root = postorder[postEnd]
leftNode = nodeNum[root] - inStart
rightNode = inEnd - nodeNum[root]
print(root, end = " ")
preorder(inStart, inStart + leftNode - 1, postStart, postStart + leftNode - 1)
preorder(inEnd - rightNode + 1, inEnd, postEnd - rightNode, postEnd - 1)
preorder(0, n - 1, 0, n - 1)
λ§λ¬΄λ¦¬
μ΄μ μ νμλ μ΄μ§ κ²μ νΈλ¦¬(λ°±μ€ :5639)μ λΉμ·ν΄μ λΉκ΅μ μ½κ² νμλ€.