問題:實現兩個函式,序列化乙個二叉樹。
如果之前做過乙個題目: 用一顆二叉樹的中序和前序還原二叉樹的話,最直觀的解法是用把二叉樹系列化成乙個中序序列和乙個前序序列,但是這個方法的缺陷是每個節點上的值不能相同,而且需要將整個序列都讀入之後才能序列化,如果序列到乙個流中,在從流中讀出來還原二叉樹效率將會比較低。
其實序列化的時候只需要前序就可以了,只是遍歷到每個null指標的時候對應的序列化位天成乙個特殊符號即可(如'#').還原的時候,直接從前往後讀,靠前的是根節點,和它相鄰的如果不是# 則是它的左孩子....如果碰到'#'則正證明當前指標應該是空指標,賦予空指標之後並返回到父節點處理其它分枝。下面是我實現的**
/*
struct treenode
};*/
class solution
void myserialize(treenode * root,string & str)
char temp[10];
sprintf(temp,"%d",root->val);
str+= temp;
str+=",";
myserialize(root->left,str);
myserialize(root->right,str);
}treenode* deserialize(char *str)
treenode* mydeserialize(char *str,int &index)
int cval = 0;
while(str[index]!=',')
index++;
treenode * root = new treenode(cval);
root->left = mydeserialize(str,index);
root->right = mydeserialize(str,index);
return root;
}};
序列化二叉樹和反序列化二叉樹
題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...
序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 序列化思路 如果二叉樹的序列化是從根節點開始的話,那麼相應的反序列化在根節點的數值對出來的時候就可以開始了,因此我們可以根據前序遍歷的的根節點數值在讀出來的時候就可以開始了,因此我們可以根據前序遍歷的順序來序列化二叉樹,因為前序遍歷是從根節點開始的。當...
序列化二叉樹
請實現兩個函式,分別用來序列化和反序列化二叉樹 分析 1.對於序列化 使用前序遍歷,遞迴的將二叉樹的值轉化為字元,並且在每次二叉樹的結點 不為空時,在轉化val所得的字元之後新增乙個 作為分割。對於空節點則以 代替。2.對於反序列化 按照前序順序,遞迴的使用字串中的字元建立乙個二叉樹。struct ...