Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
직렬화는 데이터 구조나 객체를 비트 시퀀스로 변환하여 파일이나 메모리 버퍼에 저장하거나 네트워크 연결을 통해 전송하여 나중에 같은 컴퓨터 환경이나 다른 컴퓨터 환경에서 재구성할 수 있는 프로세스입니다.
이진 트리를 직렬화하고 역직렬화하는 알고리즘을 설계합니다. 직렬화/역직렬화 알고리즘이 작동하는 방법에는 제한이 없습니다. 이진 트리를 문자열로 직렬화할 수 있고, 이 문자열을 원래 트리 구조로 역직렬화할 수 있는지 확인하기만 하면 됩니다.
설명: 입력/출력 형식은 다음과 같습니다. LeetCode가 이진 트리를 직렬화하는 방법. 반드시 이 형식을 따를 필요는 없으므로 창의력을 발휘하여 직접 다양한 접근 방식을 생각해 보세요.
예시 1:
입력: 루트 = [1,2,3,null,null,4,5] 산출: [1,2,3,널,널,4,5]
예 2:
입력: 루트 = [] 산출: []
제약:
- 트리의 노드 수는 범위 내에 있습니다.
[0, 10 4 ]
. -1000 <= 노드.val <= 1000
목차
비녀장파이썬
# 시간 복잡도: O(n) # 공간 복잡도: O(h) 컬렉션에서 deque 가져오기 유형에서 Optional 클래스 가져오기 코덱: def serialize(self, root: Optional[TreeNode]) -> str: root가 아니면: return '' queue = deque([root]) result = [] while queue: node = queue.popleft() if node: result.append(str(node.val)) queue.extend([node.left, node.right]) else: result.append('None') return ','.join(result) def deserialize(self, data: str) -> Optional[TreeNode]: data가 아니면: return None dataList = data.split(',') root = TreeNode(int(dataList[0])) queue = deque([root]) i = 1 while queue and i < len(dataList): node = queue.popleft() leftVal, rightVal = dataList[i], dataList[i+1] if i + 1 < len(dataList) else 'None' if leftVal != 'None': node.left = TreeNode(int(leftVal)) queue.append(node.left) if rightVal != 'None': node.right = TreeNode(int(rightVal)) queue.append(node.right) i += 2 return root # Codec 객체가 인스턴스화되고 다음과 같이 호출됩니다. root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(3) root.left.right = TreeNode(4) ser = Codec() deser = Codec() tree = ser.serialize(root) print(tree) # '1,2,5,3,4,None,None,None,None,None,None,' ans = deser.deserialize(트리) print(답변.val) # 1 print(답변.left.val) # 2 print(답변.right.val) # 5 print(답변.left.left.val) # 3 print(답변.left.right.val) # 4