二叉樹應用 序列化二叉樹

2021-08-20 18:40:28 字數 893 閱讀 2829

題目:實現兩個函式,實現序列化和反序列化二叉樹。

分析:我們可以從前序遍歷和中序遍歷序列構造出乙個二叉樹。我們可以先把一顆二叉樹序列化成乙個前序遍歷序列和乙個中序遍歷序列,然後進行構造。但是這個思路有兩個缺點,乙個是要求兩個序列中所有資料都讀出後才能開始反序列化,另外要求不能有數值重複的節點。

我們可以根據前序遍歷的順序來序列化二叉樹,前序遍歷是從根節點開始的。當在遍歷二叉樹碰到null指標時,將null換成乙個特數字符,此外節點的數字之間要用乙個特殊字元隔開。

實現如下:

/*

struct treenode

};*/

void bulid_serialize(treenode *root,string &str)

str+=to_string(root->val);

str+=',';

bulid_serialize(root->left,str);

bulid_serialize(root->right,str);

} //字串轉成char*

char*serialize(string &str)

result[i]='\0';

return result;

} //反序列化

treenode *deserializecore(char **str)

int value = 0;

while (**str != '\0' && **str != ',')

treenode *node = new treenode(value);

if (**str != '\0')

return node;

}treenode* deserialize(char *str)

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

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

樹 序列化二叉樹

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

序列化二叉樹

問題 實現兩個函式,序列化乙個二叉樹。如果之前做過乙個題目 用一顆二叉樹的中序和前序還原二叉樹的話,最直觀的解法是用把二叉樹系列化成乙個中序序列和乙個前序序列,但是這個方法的缺陷是每個節點上的值不能相同,而且需要將整個序列都讀入之後才能序列化,如果序列到乙個流中,在從流中讀出來還原二叉樹效率將會比較...