劍指offer 序列化二叉樹

2021-10-04 17:27:19 字數 2653 閱讀 8334

題目描述

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

二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。

二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。

思路

遞迴

方法一是照著大佬方法寫的,不是通常的先序遍歷序列。

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

serialize

(self, root)

:# write code here

ifnot root:

return

"#,"

return

str(root.val)

+","

+self.serialize(root.left)

+self.serialize(root.right)

defdeserialize

(self, s)

:# write code here

ifnot s:

return

none

news=s.split(

',')

root,index=self.deserialize_new(news,0)

return root

defdeserialize_new

(self,s,index)

:if index>=

len(s)

or s[index]

=='#'

:return

none

,index+

1 node=treenode(

int(s[index]))

index+=

1 node.left,index=self.deserialize_new(s,index)

node.right,index=self.deserialize_new(s,index)

return node,index

方法二

層次遍歷序列化,按通常的先序遍歷執行反序列化。

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

serialize

(self, root)

:# write code here

ifnot root:

return

"#"#層次遍歷存

res=

queue=

while queue:

flag=

false

for node in queue:

if node:

flag=

true

break

if flag!=

true

:return res

nextline=

for node in queue:

if node:

else

:'#'

)none

)none

) queue=nextline

return res

defdeserialize

(self, s):if

not s:

return

none

root=self.deserialize_new(s,0)

return root

defdeserialize_new

(self,s,index)

:if index>=

len(s)

:return

none

if s[index]

=='#'

:return

none

node=treenode(

int(s[index]))

node.left=self.deserialize_new(s,index*2+

1)node.right=self.deserialize_new(s,index*2+

2)return node

劍指offer 序列化二叉樹

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

劍指Offer 序列化二叉樹

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

劍指offer 序列化二叉樹

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