114. Flatten Binary Tree to Linked List 두 갈래 트리를 체인 테이블로 확장합니다.

3606 단어 #LeetCode
두 갈래 나무를 정해 제자리에서 그것을 단일 체인 테이블로 전개한다.
예를 들어, 지정된 두 갈래 트리
    1
   / \
  2   5
 / \   \
3   4   6

다음으로 확장:
1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

앞차례 를 두루 다니다


두 갈래 트리를 단일 체인 테이블로 펼친 후, 단일 체인 테이블의 노드 순서는 두 갈래 트리의 앞 순서로 각 노드에 접근하는 순서입니다.따라서 두 갈래 트리를 앞뒤로 훑어보고 각 노드가 방문한 순서를 얻을 수 있다.두 갈래 나무를 체인 테이블로 펼치면 두 갈래 나무의 구조가 파괴되기 때문에 앞의 순서가 끝난 후에 각 노드의 좌우 노드 정보를 업데이트하고 두 갈래 나무를 단일 체인 테이블로 전개합니다.

Code

	def flatten(self, root: TreeNode) -> None:
		"""
        Do not return anything, modify root in-place instead.
        """
		def preOrderTraversal(root: TreeNode):
			if root:
				preOrderList.append(root)
				preOrderTraversal(root.left)
				preOrderTraversal(root.right)

		preOrderList = []
		preOrderTraversal(root)
		size = len(preOrderList)
		for i in range(1, size):
			prev, curr = preOrderList[i - 1], preOrderList[i]
			prev.left = None
			prev.right = curr

복잡도 분석


시간 복잡도: O(n), 그중 n은 두 갈래 나무의 노드 수입니다.앞뒤로 흐르는 시간의 복잡도는 O(n)이고, 앞뒤로 흐르는 시간의 복잡도는 각 노드에 대해 좌우 하위 노드의 정보를 업데이트해야 하며, 시간의 복잡도도 O(n)이다.
공간 복잡도: O(n), 그중 n은 두 갈래 나무의 노드 수이다.공간의 복잡도는 창고 (반복 호출 창고 또는 교체에서 현저하게 사용되는 창고) 와 이전 반복 결과를 저장하는 목록의 크기에 달려 있으며, 창고 안의 원소 개수는 n을 초과하지 않으며, 이전 반복 목록의 원소 개수는 nn이다.

좋은 웹페이지 즐겨찾기