LeetCode_105_이전 순서와 중간 순서 반복 순서 구조 두 갈래 나무_hn

1380 단어

제목 설명


한 그루의 나무의 전차적 역류와 중차적 역류에 따라 두 갈래 나무를 구성한다.
주의: 트리에 중복된 요소가 없다고 가정할 수 있습니다.
예를 들어
  preorder = [3,9,20,15,7]
  inorder = [9,3,15,20,7]

다음 두 갈래 트리로 돌아갑니다.
    3
   / \
  9  20
    /  \
   15   7

해답 방법


방법1: 귀속


생각


먼저 앞의 차례와 중간의 차례가 무엇인지 알아보자.
앞의 순서 반복: 앞의 순서는 아버지 노드->왼쪽 하위 노드->오른쪽 하위 노드 뒤의 순서: 앞의 순서는 왼쪽 하위 노드->아버지 노드->오른쪽 하위 노드입니다. 우리는 앞의 순서는 첫 번째 원소가 루트 노드이고 뒷의 순서는 이 루트 노드가 있는 위치의 왼쪽이 왼쪽 나무이고 오른쪽이 오른쪽 하위 나무라는 것을 발견할 수 있습니다.
예제:
앞의 순서는 preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
preorder의 첫 번째 원소 3은 나무 전체의 뿌리 노드입니다.order 중 3의 왼쪽[9]은 나무의 왼쪽 자목이고 오른쪽[15, 20, 7]은 나무의 오른쪽 자목을 구성한다.
그래서 두 갈래 나무를 구축하는 문제는 본질적으로 다음과 같다.
1. 각 하위 트리의 루트 노드를 찾아서 루트 2, 이 루트 노드를 구축하는 왼쪽 하위 트리 3, 이 루트 노드를 구축하는 오른쪽 하위 트리

코드

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if len(preorder) == 0:
            return None
#  
        root = TreeNode(preorder[0])
#  , 
        i = inorder.index(preorder[0])
#  
        root.left = self.buildTree(preorder[1:i+1], inorder[:i])
#  
        root.right = self.buildTree(preorder[i+1:], inorder[i+1:])
        return root

시간 복잡도


공간 복잡도


결과 제출

좋은 웹페이지 즐겨찾기