|
|
|
@ -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<TreeNode> 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<TreeNode> 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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|