divide & conquer : 트리의 루트를 정하고 왼쪽 트리, 오른쪽 트리를 정하는 작은 로직이 문제 전체를 풀 수 있는 로직이다.
가장 위에 있는 노드를 루트 노드로 정한다.
루트 노드를 기준으로 왼쪽에 있으면 왼쪽 트리에, 오른쪽에 있으면 오른쪽 트리에 넣음
재귀를 통해 1~2 반복하여 트리 확정
트리 전위순회, 후위순회는 각각 재귀가 일어나기 전, 후에 일어나므로
preorder()
왼쪽 자식트리로 가는 재귀
오른쪽 자식트리로 가는 재귀
postorder()
위와 같은 순으로 배치되면 됨.
파이썬에 재귀 제한이 있는줄 몰랐음. 1000번 제한인데 이걸 system에서 강제로 노드의 개수까지 늘려줘야 함.
sort에서 헤맸음. 두 가지 기준으로 sort할 때 key = lambda를 사용하면 편리함.
preorder(), postorder()를 따로 빼면 시간복잡도가 세배 증가함.
→ O(N)인 건 똑같지만 연산 횟수가 N회에서 3N회로 증가하므로, 코딩테스트에서는 유효한 차이임.