天天看點

二叉樹層序序列化與反序列化

二叉樹層序序列化與反序列化

二叉樹層序序列化與反序列化

二叉樹的正序列化:把二叉樹按照某種周遊方式的結果以某種格式儲存為字元串,進而使得記憶體中建立起來的二叉樹可以持久儲存。

序列化可以基于 先序、中序、後序、層序 的方式來進行周遊。

層序序列化要求:

1、從二叉樹的根節點開始,逐層周遊

2、資料之間使用逗号“,”隔開

3、樹的節點中,存在的節點将值(51、7、13等)存入數組中即可

4、結尾如果有不存在的節點,則全部忽略

根據規則,忽略掉結尾不存在的節點後,字元串應該為"51,7,13,5,26,17,9"

一、正序列化

根據要求我們可以看出是用層序排序法來序列化,推薦用隊列來存儲節點。

實作步驟:

1.首先我們先将樹的根節點(51)存入隊列

二叉樹層序序列化與反序列化

2.利用隊列先進先出原理取出根節點(51)

二叉樹層序序列化與反序列化

3.此時再存入根節點的左右子節點(左子節點:7,右子節點:13),那麼隊列中就有兩個節點(7,13)

二叉樹層序序列化與反序列化

4.此時我們再從隊列中取出目前根節點的左子節點(7),隊列中隻剩一個節點(13)

二叉樹層序序列化與反序列化

5.添加左子節點(7)的左右子節點(5,0),此時隊列中節點個數為三個(13,5,0,這裡空節點我們用0表示)

二叉樹層序序列化與反序列化

6.以此類推,直到所有節點都加入隊列,并從隊列中取出後,隊列中無任何節點

代碼示例

二叉樹層序序列化與反序列化

二叉樹的反序列化:從檔案或者數組中取出資料,重構二叉樹

二、反序列化

依然采用隊列來存儲我們想要的樹,再利用隊列特性一一取出并指派上符串相應的數值

實作步驟:

1.首先我們先定義一個樹并初始化節點數值為0

2.将根節點存入隊列

二叉樹層序序列化與反序列化

3.将隊列的第一個節點取出并指派

二叉樹層序序列化與反序列化

4.将根節點(51)的左右子節點放入隊列中

二叉樹層序序列化與反序列化

5.将根節點的左子(7)節點取出并指派,

二叉樹層序序列化與反序列化

6.加入節點(7)的左右子節點

二叉樹層序序列化與反序列化

7.以此類推,直到所有節點都加入隊列,并從隊列中取出後,隊列中無任何節點

代碼示例

二叉樹層序序列化與反序列化

繼續閱讀