算法(4)二叉樹的序列化和反序列化

1、二叉樹序列化
1、 每個節(jié)點的值結(jié)束后加入 “!” 用來分割,當節(jié)點是 null 的時候插入 “#” 返回。

   //node 節(jié)點結(jié)構(gòu)
   static class TreeNode {
       int val = 0;
       TreeNode left = null;
       TreeNode right = null;

       public TreeNode(int val) {
           this.val = val;
       }
   }
   /**
     * 序列化,先序遍歷
     * @param root
     * @param result
     */
   static void serializable(TreeNode root, StringBuilder result) {
        if (root != null) {
            result.append(root.val).append("!");
            serializable(root.left, result);
            serializable(root.right, result);
        } else {
            result.append("#!");
        }
    }

2、反序列化
1、根據(jù)“!” 將字符串分割成string數(shù)組
2、遞歸調(diào)用重建二叉樹,先根據(jù)str[index] 是不是 “#”,判斷是否需要新建一個節(jié)點,如果不是null,new一個新節(jié)點,然后遞歸調(diào)用重建它的左子樹,之后是右子樹。
3、需要維護一個全局變量來表示string數(shù)組當前的偏移位置。

    //
    static int index = 0;
    static TreeNode deserialize(String[] tree) {
        if ("#".equals(tree[index])) {
            index++;
            return null;
        } else {
            TreeNode node = new TreeNode(Integer.parseInt(tree[index++]));
            node.left = deserialize(tree);
            node.right = deserialize(tree);
            return node;
        }
    }

    static void solution(String str) {
        String[] strs = str.split("!");
        TreeNode node = deserialize(strs);
    }
public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node8 = new TreeNode(8);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node3.left = node5;
        node3.right = node6;
        node5.left = node7;
        node5.right = node8;
        StringBuilder str = new StringBuilder("");
        serializable(node1, str);
        System.out.println(str);
        solution(str.toString());
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 自己一個人做一件事是很偉大的,沒有人能說你不合群。 如果你喜歡吃蛋糕,那就每天都當做自己的生日,然后買個蛋糕假裝為...
    禾必閱讀 444評論 0 3
  • 萬事遵循道 萬利切守信 萬人皆善行 天道 人道 商道 道,亦有道也!——《少帥?新商道》
    梁俊梅閱讀 126評論 0 0
  • 我喜歡在一個安靜的夜里 就坐在一處安靜的角落里 但絕不是在一個封閉的小房間 而是在這安靜的石頭上 讓風安靜地吹 聽...
    更向遠行閱讀 239評論 0 1
  • 重幃深處明鏡堂, 銀河漸落清宵長。 燭影聽風青垂柳, 芙蓉微度珠箔香。 襁褓曉夢竹塌上, 夜不安眠母愁腸。 日月急...
    虎寅閱讀 766評論 0 0
  • 余語于隅閱讀 379評論 0 4

友情鏈接更多精彩內(nèi)容