1. 程式人生 > >劍指Offer-Java-序列化二叉樹

劍指Offer-Java-序列化二叉樹

題目

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

程式碼

此題的核心點是如何表示二叉樹,並且解釋。

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.*;
public class Solution {
    String Serialize(TreeNode root) {
        StringBuilder string =
new StringBuilder(); S(root,string); return string.toString(); } void S(TreeNode root,StringBuilder string){ //當沒有子節點的時候加上#! if(root==null){ string.append("#!"); return; } //在每個資料後面都加上! //所以當整個字串用!分割以後 無節點的時候為#,有節點的時候為其資料
string.append(root.val+"!"); S(root.left,string); S(root.right,string); } TreeNode Deserialize(String str) { String[] string = str.split("!"); TreeNode root = D(string); return root; } int index = 0; TreeNode D(String[] string){ //當為#的時候說明沒有,index後移 並且返回null
if(string[index].equals("#")){ index++; return null; }else{ //當有節點的時候先構造節點,再對其左子樹和右子樹進行構造,次數的left和right不能互換方向,因為在序列化的時候的順序是先序及先root再left,right。所以其順序不可變 TreeNode temp = new TreeNode(Integer.parseInt(string[index])); index++; temp.left=D(string); temp.right=D(string); return temp; } } }