劍指Offer-二叉樹-(13)
阿新 • • 發佈:2018-12-18
知識點/資料結構:二叉樹
題目描述
請實現兩個函式,分別用來序列化和反序列化二叉樹
注意點
這些經典的資料操作一定熟記住
/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public String Serialize(TreeNode root) { if(root==null){ //這裡需要返回空的字串!!!!!自己開始寫的null return ""; } StringBuilder sb= new StringBuilder(); Serialize2(root,sb); return sb.toString(); } public void Serialize2(TreeNode root,StringBuilder sb){ if(root==null){ //一定注意!!!這裡是“#,”。因為在反序列化的時候需要根據“,”來分割。 //因為是字串,所以可以一起放進來。 sb.append("#,"); return; } sb.append(root.val); sb.append(","); //這裡利用遞迴,因為是前序遍歷,所以這樣遞迴。 //自己調皮了一下,把left和right換了一下。2018.10.3 Serialize2(root.left,sb); Serialize2(root.right,sb); } int index=-1; public TreeNode Deserialize(String str) { //這裡需要判斷字串長度是不是0 if(str.length()==0){ return null; } String []strs =str.split(","); return Deserialize2(strs); } public TreeNode Deserialize2( String []strs){ index++; //初始值為-1,++後第一個值為str【0】 if(!strs[index].equals("#")){ //開始這個自己的位置放在了上邊 //這是初始化一個節點,容器 TreeNode root=new TreeNode(0); root.val=Integer.parseInt(strs[index]); //函式的返回值是一個樹的節點 root.left=Deserialize2(strs); root.right=Deserialize2(strs); return root; } return null; } }