二叉樹的序列化與反序列化

2022-01-09 21:30:09 字數 1311 閱讀 7195

按照 leetcode 的官方習慣,二叉樹的序列化邏輯是根據其「層次遍歷」序列來實現的(參考該文章),因此本文以這種方式來解題。

對於反序列化過程,其輸入是乙個字串,我們需要將其轉換為vector,如"1,null,2"需要轉換為.

vectorsplit(string &data, const string &sep)

if (l < data.length())

result.emplace_back(data.substr(l));

return result;

}

對於vector中的每個元素,構造乙個 api,返回對應的二叉樹節點(包括空節點):

treenode *generatenode(const string &s)

其次,需要 2 個常量(以成員變數的形式存在),nil是空節點的符號表示,separator是序列化字串中的分隔符:

const string nil = "null";

const string separator = ",";

與一般的層次遍歷幾乎一樣,唯一不同的地方是:在此處,空節點nullptr也進入佇列當中

❗ 需要注意的是:最後一層均為葉子節點,因此它們的左右孩子均為null,按照 leetcode 的要求,序列化字串中不包含這些最後一層葉子節點的孩子。

string levelserialize(treenode *root)

else

result.emplace_back(nil);

}while (result.back() == nil) result.pop_back();

string str;

for (auto &x : result) str += (x + separator);

if (str.back() == separator[0]) str.pop_back();

return "[" + str + "]";

}

還是是普通的層次遍歷演算法改過來的~

treenode *leveldeserialize(string &data)

return root;

}

二叉樹 序列化與反序列化

序列化 serialization 在電腦科學的資料處理中,是指將資料結構或物件狀態轉換成可取用格式 例如存成檔案,存於緩衝,或經由網路中傳送 以留待後續在相同或另一台計算機環境中,能恢復原先狀態的過程。從一系列位元組提取資料結構的反向操作,是反序列化 也稱為解編組 deserialization ...

二叉樹序列化與反序列化

層序遍歷 實現二叉樹的序列化與反序列化。序列化二叉樹的方式有很多,最經典的就是將一顆二叉樹轉化為字串,這樣方便儲存到檔案。反序列化時只需解析這個字串,提取出每個節點的內容資訊,將二叉樹還原。二叉樹序列化有許多應用,比如 oj 平台在判斷你提交的二叉樹是否正確時,往往是將你的二叉樹序列化成字串,然後與...

序列化 反序列化二叉樹

設計乙個演算法能夠實現序列化和反序列化一棵二叉樹 注意,不是二叉搜尋樹bst 這裡的序列化指的是將一棵二叉樹儲存到檔案中,反序列化就是從檔案中讀取二叉樹結點值重構原來的二叉樹。前一篇文章儲存二叉搜尋樹到檔案中 解決了儲存一棵二叉搜尋樹到檔案中的問題,但是由於本題目的意思是要把一棵二叉樹儲存到檔案中並...