目录

三个月算法进阶--day67

层序遍历

广搜

记录

leetcode剑指offer第37题序列化二叉树

class Codec:

    def serialize(self, root):
        """Encodes a tree to a single string.
        
        :type root: TreeNode
        :rtype: str
        """
        if not root:
            return ""
        queue = collections.deque()
        queue.append(root)
        ans = [str(root.val)]
        while queue:
            node = queue.pop()
            if node.left != None:
                queue.appendleft(node.left)
                ans.append(str(node.left.val))
            else:
                ans.append("null")
            if node.right != None:
                queue.appendleft(node.right)
                ans.append(str(node.right.val))
            else:
                ans.append("null")
        index = 0
        for i in range(len(ans)):
            if ans[i] != "null":
                index = i
        return "[" + ",".join(ans[:index+1]) + "]"

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        if not data:
            return
        data = data.strip('[]').split(',')
        root = TreeNode(int(data[0]))
        queue = collections.deque()
        queue.append(root)
        start = 1
        while queue:
            node = queue.pop()
            if start == len(data):
                break
            if data[start] != "null":
                node.left = TreeNode(int(data[start]))
                queue.appendleft(node.left)
            start += 1
            if start == len(data):
                break
            if data[start] != "null":
                node.right = TreeNode(int(data[start]))
                queue.appendleft(node.right)
            start += 1
            if start == len(data):
                break
        return root

class Codec:
    def serialize(self, root):
        if not root: return "[]"
        queue = collections.deque()
        queue.append(root)
        res = []
        while queue:
            node = queue.popleft()
            if node:
                res.append(str(node.val))
                queue.append(node.left)
                queue.append(node.right)
            else: res.append("null")
        return '[' + ','.join(res) + ']'

    def deserialize(self, data):
        if data == "[]": return
        vals, i = data[1:-1].split(','), 1
        root = TreeNode(int(vals[0]))
        queue = collections.deque()
        queue.append(root)
        while queue:
            node = queue.popleft()
            if vals[i] != "null":
                node.left = TreeNode(int(vals[i]))
                queue.append(node.left)
            i += 1
            if vals[i] != "null":
                node.right = TreeNode(int(vals[i]))
                queue.append(node.right)
            i += 1
        return root