二叉樹的序列化和反序列化 先序遍歷和層次遍歷

2021-09-19 15:56:19 字數 1470 閱讀 4709

序列化是指將資料儲存到檔案中。

先序遍歷序列化

public static string serialbypre(node head) 

string res = head.value + "!";

res += serialbypre(head.left);

res += serialbypre(head.right);

return res;

}

上面的**是將乙個二叉樹序列化,如果遇到空則用#字元佔位,中間用嘆號分割。

用什麼方式序列化的,就直接用什麼方式反序列化

先序遍歷反序列化

public static string serialbypre(node head) 

string res = head.value + "!";

res += serialbypre(head.left);

res += serialbypre(head.right);

return res;

} public static node reconbyprestring(string prestr)

return reconpreorder(queue);

}

這裡反序列化,首先是將字串給通過分隔符分割,然後加到佇列裡,然後再呼叫 reconbyprestring函式,按照遞迴的先序遍歷的方式重新構建二叉樹。

中序和後序也可以序列化和反序列化。

層次遍歷實現序列化

層次遍歷序列化就是借助佇列將其序列化,而反序列化就是重做層次遍歷,遇到「#」就生成null節點,同時把非空的節點放到佇列裡面去。

public static string serialbylevel(node head) 

string res = head.value + "!";

queuequeue = new linkedlist();

queue.offer(head);

while (!queue.isempty()) else

if (head.right != null) else

} return res;

} public static node reconbylevelstring(string levelstr)

node node = null;

while (!queue.isempty())

if (node.right != null)

} return head;

} public static node generatenodebystring(string val)

return new node(integer.valueof(val));

}

序列化 反序列化二叉樹

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

序列化和反序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。基本思想很簡單,序列化就是用某一種遍歷方法將二叉樹元素儲存在字串陣列中,當然要乙個個元素分離,分得清誰是誰。反序列化就是把儲存在字串陣列中的元素進行重構,使之成為二叉樹。我們不妨選擇前序遍歷的思想進行搜尋與重構。本題的關鍵是如何對元素進行儲存,可以放在...

序列化和反序列化二叉樹

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