牛客 劍指offer系列題解 序列化二叉樹

2021-10-05 22:04:10 字數 1588 閱讀 2989

記錄刷題的過程。牛客和力扣中都有相關題目,這裡以牛客的題目描述為主。該系列預設採用python語言。

1、問題描述:

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

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

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

例如,我們可以把乙個只有根節點為1的二叉樹序列化為"1,",然後通過自己的函式來解析回這個二叉樹
2、資料結構:

二叉樹,深度優先搜尋

3、題解:

我們用先根遍歷去設計。

# -*- 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

res =

defpreorder

(root):if

not root:

'#')

'!')

return

str(root.val)

)'!'

) preorder(root.left)

preorder(root.right)

preorder(root)

return

''.join(res)

defdeserialize

(self, s)

:# write code here

res = s.split(

"!")

defdepreorder()

:if res ==

:return

none

rootval = res.pop(0)

if rootval ==

'#':

return

none

nood = treenode(

int(rootval)

) nood.left = depreorder(

) nood.right = depreorder(

)return nood

root =depreorder(

)return root

4、複雜度分析:

時間複雜度:o(n)

空間複雜度:o(n)

牛客劍指offer 1 10題解

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution else continue 記憶體集體向右移兩個位元組 並置 0前兩個位元組 v...

牛客 劍指offer系列題解 最小的K個數

記錄刷題的過程。牛客和力扣中都有相關題目,這裡以牛客的題目描述為主。該系列預設採用python語言。1 問題描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2 資料結構 二叉樹,堆 3 題解 方法1 排序,取前k個數 co...

牛客 劍指offer系列題解 把陣列排成最小的數

記錄刷題的過程。牛客和力扣中都有相關題目,這裡以牛客的題目描述為主。該系列預設採用python語言。1 問題描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。2 資料結構 陣列,字串,排序...