九章演算法面試題51 二叉樹的序列化

2021-07-02 13:06:51 字數 837 閱讀 4510

設計乙個演算法,序列化和反序列化一棵二叉樹。

解釋:序列化的意思是將記憶體中的一些特定的結構,變成有格式資訊的字串。如,對於鍊錶而言,我們可以將1->2->3->null這樣的鍊錶序列化為"1,2,3"。對於序列化演算法,必須支援反序列化,及在約定的格式下,可以將滿足格式要求的字串重新構造為想要的結構。在本題中,你需要同時實現乙個序列化函式和反序列化函式。

使用bfs。對於下面這棵二叉樹:

1/    \

2      3

/   \

4     5

bfs序為:[1,2,3,4,5]。如果我們將葉子節點的左右兒子用#來表示的話,可以得到下面這棵樹:

1/    \

2        3

/   \      /   \

#     #   4     5

/   \   /   \

#   # #     #

一行一行看可以得到:[1,2,3,#,#,4,5,#,#,#,#]

去掉尾部連續的#,可以得到[1,2,3,#,#,4,5],這樣就完成了使用bfs來序列化。

同樣的,我們也可以使用dfs進行序列化,dfs序列化的結果如下:[1,2,#,#,3,4,#,#,5,#,#],去掉末尾的#得到[1,2,#,#,3,4,#,#,5],要比bfs序列化的結果要長。原因主要在於大部分的#出現在最底層,所以bfs的方式可以使得盡量多的#都在序列化的尾部。

反序列化的過程,這裡就不多做說明了。

所謂的序列化,是將乙個結構化的東西變成扁平化的字串。這樣可以方便傳輸和進行壓縮等。使用bfs或者dfs的方法在面試中都是正確的,但如果能夠比較出bfs的方法可以更有效的節省空間的話,可以得到額外的加分。

九章演算法 Google面試題 二叉查詢樹迭代器

設計實現乙個帶有下列屬性的二叉查詢樹的迭代器 next 返回bst中下乙個最小的元素 樣例 1 輸入 輸出 1,6,10,11,12 解釋 二叉查詢樹如下 10 1 11 6 12 可以返回二叉查詢樹的中序遍歷 1,6,10,11,12 樣例 2 輸入 輸出 1,2,3 解釋 二叉查詢樹如下 2 1...

二叉樹面試題

1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...

面試題 二叉樹

面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...