題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹
思路:層次遍歷,非遞迴。(其實是二叉樹的層次遍歷,對應於寬度優先搜尋,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序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點 以 表示...