1. 程式人生 > 其它 >leetcode 297. 二叉樹的序列化與反序列化

leetcode 297. 二叉樹的序列化與反序列化

序列化是將一個數據結構或者物件轉換為連續的位元位的操作,進而可以將轉換後的資料儲存在一個檔案或者記憶體中,同時也可以通過網路傳輸到另一個計算機環境,採取相反方式重構得到原資料。

請設計一個演算法來實現二叉樹的序列化與反序列化。這裡不限定你的序列 / 反序列化演算法執行邏輯,你只需要保證一個二叉樹可以被序列化為一個字串並且將這個字串反序列化為原始的樹結構。

提示: 輸入輸出格式與 LeetCode 目前使用的方式一致,詳情請參閱LeetCode 序列化二叉樹的格式。你並非必須採取這種方式,你也可以採用其他的方法解決這個問題。

示例 1:


輸入:root = [1,2,3,null,null,4,5]
輸出:[1,2,3,null,null,4,5]
示例 2:

輸入:root = []
輸出:[]
示例 3:

輸入:root = [1]
輸出:[1]
示例 4:

輸入:root = [1,2]
輸出:[1,2]

提示:

樹中結點數在範圍 [0, 104] 內
-1000 <= Node.val <= 1000

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

1:把二叉樹先前序遍歷,變成一個字串,遇到null,則直接拼接null,否則拼接節點的值,用逗號分隔。

2:用逗號把字串轉換為陣列,然後遍歷陣列,組裝成樹。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Codec {

    public String serialize(TreeNode root) {
        StringBuilder res = new StringBuilder();
        node2Str(root, res);
        
return res.toString(); } private void node2Str(TreeNode root, StringBuilder str) { if (null == root) { str.append("null,"); return; } str.append(root.val); str.append(","); node2Str(root.left, str); node2Str(root.right, str); } private int index = 0; private String[] strs; public TreeNode deserialize(String data) { strs = data.split(","); index = 0; return str2Node(); } private TreeNode str2Node() { if ("null".equals(strs[index])) { index++; return null; } TreeNode res = new TreeNode(Integer.valueOf(strs[index])); index++; res.left = str2Node(); res.right = str2Node(); return res; } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root));