seungriyou / algorithm-study

알고리즘 & SQL 문제 풀이 기록
https://leetcode.com/u/summer_y
0 stars 0 forks source link

[LC] 105. Construct Binary Tree from Preorder and Inorder Traversal #65

Open seungriyou opened 6 months ago

seungriyou commented 6 months ago

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

Approach

Idea 1

ref: https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solutions/981152/recursion-explanation-visuals-python

preorder 혹은 inorder 중 하나만으로는 unique 하게 binary tree를 결정할 수 없다. 따라서 두 가지를 모두 사용하여 tree를 결정해야 한다.

preorder와 inorder 간 관계를 살펴보기 위해, 예를 들어 확인해보자.

image img src


Idea 2

ref: https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solutions/2279180/python-explained

혹은, preorder에 대해서는 맨 앞의 원소만 root로 pop 하면서 사용할 수도 있다. (preorder.pop(0) or preorder 뒤집고 preorder.pop())

어차피 preorder를 사용하는 목적은 root를 찾기 위함이기 때문이다.

이렇게 작성할 때는 inorder가 비어있지 않다면 동작을 수행하는 형태로 작성한다.


[!tip] 예시를 직접 확인하면서 규칙을 찾아보자!


[!note] index를 hash table에 기록하고 pointer를 사용한다면, .index()를 사용하지 않고 O(1)에 위치를 찾음으로써 time optimize, slicing 할 필요도 없어 space optimize도 가능할 것 같다.

혹은 deque를 사용할 수도?

이건 나중에..

ref: link1 / link2


Complexity