프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

문제

 

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

 

Construct Binary Tree from Preorder and Inorder Traversal - LeetCode

Can you solve this real interview question? Construct Binary Tree from Preorder and Inorder Traversal - Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same

leetcode.com

 

풀이

 

난이도: Medium 

 

트리의 전위순회(preorder)와 중위순회(inorder) 정보를 활용해 실제 트리를 구하는 문제이다.

전위 순회는 root -> leftSubtree -> rightSubtree 순서로 방문한다.

중위 순회는  leftSubtree -> root  -> rightSubtree 순서로 방문한다.

이를 그림으로 나타내면 다음과 같다.

 

 

preorder는 root가 가장 앞에 있는 것을 이용해서 inorder에서 root값을 가지는 순서를 찾는다.

inorder에서 root의 앞에 있는 노드들은 leftSubtree의 노드들로 그 개수(N)를 알 수 있다.

preorder에서 root 다음의 N개의 노드는 left Subtree에 해당하므로 각각의 leftSubtree와 rightSubtree를 분리해서 재귀로 함수를 호출하면 원본 트리를 구할 수 있다.

 

 

 

코드

 

 

이러한 방식은 노드를 한번씩만 방문하기 때문에 시간 복잡도는 O(n)이고 vector의 값을  깊은 복사로 진행시켰기 때문에 값을 복하지 않는 것이 훨씬 빠르다.

 

Map으로 inorder의 원소 위치를 저장시키고,

vector들을 copy시키고 넘겨서 진행하기 보다는 inorder의 범위 index를 넘겨서 빠르게 접근한다.

 

 

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solutions/3690778/easy-c-solution-beat-99-optimised/

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함