면접 문제 37 서열화 두 갈래 트리python3 BFS+ 보조 대기열

2122 단어 Leetcode
두 함수를 각각 서열화와 반서열화 두 갈래 트리에 사용하십시오.
예:
다음 두 갈래 나무를
    1    /\  2   3      /\    4   5
"[1,2,3,null,null,4,5]"로 서열화
이 문제의 초기 코드는 다음과 같습니다.
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Codec:

    def serialize(self, root):
        """Encodes a tree to a single string.
        
        :type root: TreeNode
        :rtype: str
        """
        

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        

# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.deserialize(codec.serialize(root))

이를 통해 알 수 있듯이 서열화된 두 갈래 트리의 입력은 하나의 뿌리 노드이고 출력은 하나의 문자열이다.반서열화는 문자열 입력으로 두 갈래 트리를 재구성할 수 있습니다.다음은 각각 해답을 구하겠습니다.
 

1. 서열화 부분


입력: 나무의 뿌리 노드;
출력:문자열.

사고의 방향


사실 이것은 32번과 매우 비슷하다: 위에서 아래로 두 갈래 트리 Python 3 광도 우선 검색
먼저 32문제 코드를 드리겠습니다.보조 대기열 + BFS 사용
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
 
class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        queue = []
        res = []
        queue.append(root)
        while queue:
            # for i in queue:
            node = queue[0]
            queue = queue[1:]
            res.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        
        if not queue:
            return res

32문항과 본문을 비교해 보면 32문항을 토대로
  • null의 노드도res에 저장(완전한 복구 트리를 위한 목적):
  • 전체 과정은 문자열 append의 형식으로 완성
  • 본 문제의 해답을 얻을 수 있다.
    전체적으로 본 문제는 BFS+ 보조 대기열의 방법인 계층 순으로 다룹니다.
    변경된 코드는 다음과 같습니다.
    코드를 자꾸 잘못 고쳐서...가서 샤워하고 내일 고치자.
     
     
     

    좋은 웹페이지 즐겨찾기