二叉樹的序列化和反序列化 用先序和層

2021-09-29 12:05:12 字數 1255 閱讀 1836

元素之間用 "_" 分開,遇到用 "#" 隔開

即該序列化為:a_b_d_#_#_e_#_#_c_#_f

利用先序遍歷的一大特點(訪問順序):中左右.  在使用遞迴便可得到它的序列化

public static string serialbypre(node head)

string res=head.value+"_";

res+=serialbypre(head.left);

res+=serialbypre(head.right);

return res;

}

反序列化是指將a_b_d_#_#_e_#_#_c_#_f轉換成二叉樹的形式

這裡需要使用乙個佇列(fifo),在使用遞迴,在遇到 "#"時返回null,而且根據的遞迴特性,很容易知道左子樹和右子樹

用層的方式進行序列化。也就是:a_b_c_d_e_#_f_#_#_#_#_#_#

public static string levelbypre(node head)

queuequeue=new linkedlist();

string res=head.value+"_";

queue.offer(head);

while(!queue.isempty())else

if(head.right!=null)else

}return res;

}

反序列化:

public static node reconlevelbypre(string str)

node node=null;

while(!queue.isempty())

if(node.right!=null)

}return head;

} public static node getnodebystring(string str)

return new node(new integer(str));

}

序列化和反序列化二叉樹

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

序列化和反序列化二叉樹

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

序列化 反序列化二叉樹

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