2 12 劍指offer 序列化二叉樹

2021-09-10 18:17:00 字數 1193 閱讀 7937

請實現兩個函式,分別用來序列化和反序列化二叉樹

class

solution

:def

__init__

(self)

: self.seri =

"" self.s =

defserialize

(self, root)

:'''# 自己寫的**冗長且需要定義全域性變數,如果多次呼叫該函式,會導致序列不斷累加而出錯。

if root != none:

self.seri += str(root.val) + ','

else:

self.seri += 'n,'

return

self.serialize(root.left)

self.serialize(root.right)

return self.seri[:-1]'''

ifnot root:

return

'n'return

str(root.val)

+','

+ self.serialize(root.left)

+','

+ self.serialize(root.right)

# 定義清楚遞迴函式實現的功能,把字串,反序列化為二叉樹

defdeserialize

(self, s):if

len(s)==0

:return

if self.s ==

: self.s = s.split(

',')

'''v = s[0]

self.s = s[2:] #只適用於一位數字,如果數字是10,100出錯啊'''

v = self.s.pop(0)

# 左子樹pop完成之後,輪到右子樹對應的序列

if v !=

'n':

root = treenode(

int(v)

)

root.left = self.deserialize(self.s)

root.right = self.deserialize(self.s)

return root

else

:return

none

劍指offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。首先得理解題目的意思,序列化就是返回乙個帶有 和逗號的字串。反序列化就是根據帶有 和逗號的字串返回一棵二叉樹。比如對於二叉樹 1 2 3 4 5 6 7來講,序列化的結果是1,2,3,4,7,5,而反序列化的結果則是輸出一棵二叉樹。public cla...

劍指Offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 根據前面的面試題重建二叉樹,我們知道可以從前序遍歷和中序遍歷構造出一棵二叉樹。受此啟發,我們可以先把一棵二叉樹序列化成乙個前序遍歷序列和乙個中序序列的結合,然後再反序列化時通過這兩個序列重構出原二叉樹。但是這個思路有兩個缺點。乙個缺點是該方法要求二叉樹...

劍指offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 首先這道題目是要有兩個問題,第乙個是把一棵二叉樹按照前序遍歷的方式變成乙個字串。第二個是把乙個字串變成乙個二叉樹。對於第乙個問題來說,我們要對這棵樹進行乙個前序遍歷,按照中左右的方式放入列表中,如果節點為空,則插入 最後.join 來實現列表到字串的轉...