61 序列化二叉樹

2021-09-26 23:57:30 字數 1196 閱讀 3636

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

二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。

二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。

1. 對於序列化:使用前序遍歷,遞迴的將二叉樹的值轉化為字元,並且在每次二叉樹的結點

不為空時,在轉化val所得的字元之後新增乙個' , '作為分割。對於空節點則以 '#' 代替。

2. 對於反序列化:按照前序順序,遞迴的使用字串中的字元建立乙個二叉樹(特別注意:

在遞迴時,遞迴函式的引數一定要是char ** ,這樣才能保證每次遞迴後指向字串的指標會

隨著遞迴的進行而移動!!!) 

/*

struct treenode

};*/

class solution

ret[i] = '\0';

return ret;

}void serialize(treenode *root, string& str)

string r = to_string(root->val);

str += r;

str += '!';

serialize(root->left, str);

serialize(root->right, str);

}treenode* deserialize(char *str)

treenode* deserialize(char **str)

int num = 0;

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

treenode *root = new treenode(num);

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

return root;

else

(*str)++;

root->left = deserialize(str);

root->right = deserialize(str);

return root;

}};

61 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 思路一 選用vectorarr作為輔助,最後轉為int 和char 的資料型別,由於 不方便表示,因此用乙個不會出現的數0x23333代替。方法上是使用遞迴的先序遍歷。一 struct treenode class solution treenode ...

61 序列化二叉樹

題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 思路 層次遍歷,非遞迴。其實是二叉樹的層次遍歷,對應於寬度優先搜尋,bfs。二叉樹的序列化,即給定二叉樹的根結點,按照某種遍歷方式將所有結點鏈結為乙個陣列或者字串。反序列化,即根據給定的序列重新恢復一棵二叉樹。例如一棵二叉樹 1 2 3 nu...

61序列化二叉樹

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