劍指Offer 37 序列化二叉樹

2021-10-09 20:29:18 字數 1529 閱讀 6958

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

示例:  將以下二叉樹:1/

2 3/

4 5序列化為 「[1,2,3,null,null,4,5]」

序列化: 利用佇列和廣度遍歷, 節點不為空則拼接值到字串, 空則拼接null

反序列化: 將字串去頭去尾, 以","分割成字串陣列, 借助佇列, 掃瞄陣列, 如果元素不是"null"則新增子節點

/**

* definition for a binary tree node.

* public class treenode

* }*/public

class

codec

stringbuilder result =

newstringbuilder

("[");

linkedlist

nodes =

newlinkedlist

<

>()

; nodes.

addlast

(root)

;while

(!nodes.

isempty()

)else

}// 把最後的","去掉並拼接"]"

return result.

deletecharat

(result.

length()

-1).

("]").

tostring()

;}public treenode deserialize

(string data)

// 先把左右括號去掉, 以","分割

string[

] nodes = data.

substring(1

, data.

length()

-1).

split

(",");

// 取出第乙個字串生成節點

treenode root =

newtreenode

(integer.

parseint

(nodes[0]

));// 借助佇列, 類似於廣度遍歷

linkedlist

queue =

newlinkedlist

<

>()

; queue.

addlast

(root)

;int i =1;

// 遍歷字串陣列的索引

while

(i < nodes.length &&

!queue.

isempty()

)// 無論是不是null都要移動索引

i++;if

(i < nodes.length &&

!"null"

.equals

(nodes[i]))

i++;}

return root;

}}

劍指Offer 37 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 例 樹 1 2 3 4 5 6 序列化 1,2,4,3,5,6,容易發現序列化其實就是帶none的前序遍歷。所以題目就是完成乙個前序遍歷將節點值存入列表,遍歷列表按前序生成一棵二叉樹。時間複雜度 o n 空間複雜度 o n from datstru i...

劍指offer37 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...

《劍指offer》 37 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。示例 你可以將以下二叉樹 1 2 3 4 5 序列化為 1,2,3,null,null,4,5 層序遍歷,使用乙個佇列輔助queue 的 push pop front to string複雜度 o時間複雜度 o n 空間複雜度 o n definiti...