BST 직렬화 및 역직렬화
이진 검색 트리를 직렬화 및 역직렬화하는 알고리즘을 설계합니다. 직렬화/역직렬화 알고리즘이 작동하는 방식에는 제한이 없습니다. 이진 검색 트리를 문자열로 직렬화할 수 있고 이 문자열을 원래 트리 구조로 역직렬화할 수 있는지 확인해야 합니다.
인코딩된 문자열은 가능한 한 간결해야 합니다.
예 1:
입력: 루트 = [2,1,3]
출력: [2,1,3]
예 2:
입력: 루트 = []
출력: []
제약:
[0, 104]
범위에 있습니다. 0 <= Node.val <= 104
해결책:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Codec:
def serialize(self, root: Optional[TreeNode]) -> str:
tree = {}
paths = [(root, 0)]
while len(paths) > 0:
curr, i = paths.pop()
if curr:
tree[i] = curr.val
paths.append((curr.left, 2 * i + 1))
paths.append((curr.right, 2 * i + 2))
return ";".join(["{}={}".format(k, v) for k, v in tree.items()])
def deserialize(self, data: str) -> Optional[TreeNode]:
vals = data.split(";")
tree = {}
for v in vals:
if len(v) > 0:
key, value = v.split("=")
tree[int(key)] = int(value)
if len(tree) == 0:
return None
root = TreeNode()
paths = [(root, 0)]
while len(paths) > 0:
curr, i = paths.pop()
curr.val = tree[i]
if (2 * i + 1) in tree:
curr.left = TreeNode()
paths.append((curr.left, 2 * i + 1))
if (2 * i + 2) in tree:
curr.right = TreeNode()
paths.append((curr.right, 2 * i + 2))
return root
# Your Codec object will be instantiated and called as such:
# Your Codec object will be instantiated and called as such:
# ser = Codec()
# deser = Codec()
# tree = ser.serialize(root)
# ans = deser.deserialize(tree)
# return ans
Reference
이 문제에 관하여(BST 직렬화 및 역직렬화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/serialize-and-deserialize-bst-45dm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)