diff --git a/blogs/Algorithm/剑指 Offer/二叉树相关.md b/blogs/Algorithm/剑指 Offer/二叉树相关.md index 84ec5c6..f87ff62 100644 --- a/blogs/Algorithm/剑指 Offer/二叉树相关.md +++ b/blogs/Algorithm/剑指 Offer/二叉树相关.md @@ -4,7 +4,16 @@ #### 目录 -1. #### [07. 重建二叉树](https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/) +1. [07. 重建二叉树](https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/) +2. [26. 树的子结构](https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/) +3. [ 27. 二叉树的镜像](https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/) +4. [32 - I. 从上到下打印二叉树](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/) +5. [ Offer 34. 二叉树中和为某一值的路径](https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/) +6. [55 - I. 二叉树的深度](https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof/) +7. [55 - II. 平衡二叉树](https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/) +8. [32 - II. 从上到下打印二叉树 II](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/) +9. [32 - III. 从上到下打印二叉树 III](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/) +10. [37. 序列化二叉树](https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/) #### [07. 重建二叉树](https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/) @@ -360,3 +369,59 @@ class Solution { } ``` +#### [37. 序列化二叉树](https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/) + +```java +public class Codec { + + // Encodes a tree to a single string. + public String serialize(TreeNode root) { + if (root == null) { + return "[]"; + } + Deque deque = new LinkedList<>(); + deque.add(root); + StringBuilder builder = new StringBuilder("["); + while (!deque.isEmpty()) { + TreeNode node = deque.poll(); + if (node != null) { + builder.append(node.val).append(","); + deque.add(node.left); + deque.add(node.right); + } else { + builder.append("null,"); + } + } + builder.deleteCharAt(builder.length() - 1); + builder.append("]"); + return builder.toString(); + } + + // Decodes your encoded data to tree. + public TreeNode deserialize(String data) { + if ("[]".equals(data)) { + return null; + } + String[] vals = data.substring(1, data.length() - 1).split(","); + TreeNode root = new TreeNode(Integer.parseInt(vals[0])); + Queue queue = new LinkedList<>(); + queue.add(root); + int i = 1; + while (!queue.isEmpty()) { + TreeNode node = queue.poll(); + if (!vals[i].equals("null")) { + node.left = new TreeNode(Integer.parseInt(vals[i])); + queue.add(node.left); + } + i++; + if (!vals[i].equals("null")) { + node.right = new TreeNode(Integer.parseInt(vals[i])); + queue.add(node.right); + } + i++; + } + return root; + } +} +``` +