【面試題37】序列化二叉樹

這個題之前做過,297.二叉樹的序列化和反序列化,這裏還是用這種寫法,劍指Offer上的代碼是C++的,使用的是Stream,這裏我們用字符串進行保存來序列化,將字符串轉換成列表進行反序列化。
在這裏插入圖片描述
Python題解

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Serialize(self, root):
        def predfs(node, res):
            if not node:res+="#!"
            else:
                res = res + str(node.val) + "!"
                res = predfs(node.left, res)
                res = predfs(node.right, res)
            return res
        return predfs(root, "")
    def Deserialize(self, s):
        def helper(s):
            if s[0] == "#":
                s.pop(0)
                return None
            node = TreeNode(int(s.pop(0)))
            node.left = helper(s)
            node.right = helper(s)
            return node
        data = s.split("!")
        return helper(data)

考點

  • 考查分析複雜問題的能力。爲了把這個問題分析清楚,我們把樹分成3部分:根節點、左子樹和右子樹,在序列化/反序列化根節點之後再分別序列化/反序列化左、右子樹,因此可以遞歸解決。解決這個問題的關鍵在於把一個大的問題分解成幾個小問題,並遞歸的解決小問題;
  • 考查對二叉樹的遍歷的理解及編程能力。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章