61 序列化二叉樹

2021-08-27 08:27:00 字數 1203 閱讀 3076

題目描述

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

思路:層次遍歷,非遞迴。(其實是二叉樹的層次遍歷,對應於寬度優先搜尋,bfs。)

二叉樹的序列化,即給定二叉樹的根結點,按照某種遍歷方式將所有結點鏈結為乙個陣列或者字串。

反序列化,即根據給定的序列重新恢復一棵二叉樹。

例如一棵二叉樹:

1/ \

2 3

/ \ / \

null null 4 5

/ \ / \

null null null null

層次遍歷該二叉樹,空結點用#表示,結點與結點間用空格隔開,序列化的結果為:1 2 3 # # 4 5 # # # #

去掉最後的#,結果為1 2 3 # # 4 5

然後再根據1 2 3 # # 4 5反序列化。

/*

struct treenode

};*/

class solution

else

s += "# ";

q.pop_front();

}int end = s.size() - 1;

while(!(s[end] >= '0' && s[end] <= '9'))

--end;

s = s.substr(0, end + 1);//去掉最後面的#

char* ch = strdup(s.c_str());將字串s轉換為char*;strdup(char* ss):將串ss的乙個副本拷貝到新建的位置處,這個副本有自己的記憶體空間,和ss不相干

return ch;

}treenode* deserialize(char *str)

return root;

}treenode* nextnode(char* str, int &i)

s += str[i];

++i;

}if(str[i] == ' ')

++i;

if(!s.empty())

return null;

}};/*nextnode函式中的while的作用,是為了防止陣列中兩位數,例如,如果將while改為if,那麼:

測試用例:

對應輸出應該為:

你的輸出為:

*/

61 序列化二叉樹

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

61 序列化二叉樹

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

61序列化二叉樹

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