基本演算法之二叉樹的序列化和反序列化

2021-10-13 02:47:33 字數 1471 閱讀 6718

作用

由於樹結構是二維的,在輸入輸出時,這樣的結構不是很好表示,所以需要使用一種方式將樹結構轉換成一種易於輸入輸出的形式表示,同時不失樹的結構特性。

把樹轉換成線性結構單元(如陣列)稱做序列化,把線性結構單元(如陣列)還原成樹結構稱作反序列化。

**

#include

using

namespace std;

// 二叉樹結構

typedef

struct treenode

} treenode;

//注意:to_string()函式是非標準庫中的函式,但是被包含在中,由於本人本地ide的問題無法使用to_string()函式,故自己實現了給函式方法。並未考慮到效率問題。

//作用:將數字由int型別轉變成string型別。

string to_string

(int num)

// 二叉樹的序列化和反序列化類

class

serializeanddeserialize

else temp +

= data[i];}

return result;

}// 將數字由string型別轉換成int型別

intstr2int

(string& s)

num = num *10+

(s[i]

-'0');

}return

(int

)(num * flag);}

public

:// 序列化方法

// 使用廣度優先搜尋序列化二叉樹

string serialize

(treenode *root)

else data +

="null,";}

return data;

}// 反序列化方法

treenode*

deserialize

(string data)

++i;

if(v[i]

!="null"

)++i;

q.pop();

}return root;}}

;// 輔助函式

void

helper

(treenode* root,vector<

int>

& result)

// 後序遍歷

vector<

int>

postorder

(treenode* root)

// 主函式

// 測試序列化和反序列化是否成功實現

intmain

(void

)

寫在最後

二叉樹的序列化和反序列化方法是有多種實現方式的,有興趣的可以自己探索效率更高,思路更簡潔的方法。

儘管二叉樹的序列化和反序列化方法不屬於常用的演算法之一,但是該演算法實現的功能卻是很實用的,值得掌握。

序列化二叉樹和反序列化二叉樹

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

序列化和反序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。基本思想很簡單,序列化就是用某一種遍歷方法將二叉樹元素儲存在字串陣列中,當然要乙個個元素分離,分得清誰是誰。反序列化就是把儲存在字串陣列中的元素進行重構,使之成為二叉樹。我們不妨選擇前序遍歷的思想進行搜尋與重構。本題的關鍵是如何對元素進行儲存,可以放在...

序列化和反序列化二叉樹

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