序列化二叉樹和反序列化二叉樹

2021-09-26 13:29:36 字數 1260 閱讀 7325

題目描述

請實現兩個函式,分別用來序列化和反序列化二叉樹

二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。

二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。

這個題折磨了我3小時,總算做出來了,唉,還是菜,通過這個問題我明白了找bug是乙個多麼神聖還費腦子技能,這也提醒我了如果程式執行不出來可以通過看這段程式的執行步驟來解決自己腦迴路的問題,這是題外話

public class main 

xulie(root, sb);

return sb.tostring();

}//序列化的遞迴程式

string xulie(treenode root,stringbuffer str) else

//右if(root.right!=null) else

return null;

} //反序列化程式

treenode deserialize(string str)

//以,分割成陣列,就算是5,也只會分割成長度為1的陣列

string strs = str.split(",");

treenode t0 = new treenode(0);//建立新節點,但是值是隨意加的,進入遞迴再重新賦值

treenode t1 = t0; //t1是二叉樹的根

fanxulie(t0, strs);

return t1;

} int index=0; //設定成全域性變數,這樣可以遞增索引

treenode fanxulie(treenode root,string str)

root.val=integer.parseint(str[index]); //重新給節點賦值,賦的值是數值中的值,

index++;

if(str[index].equals("#")) else

index++;

if(str[index].equals("#")) else

return null;

} public static void main(string args)

}

序列化 反序列化二叉樹

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

序列化和反序列化二叉樹

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

序列化和反序列化二叉樹

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