算法19:LeetCode_二叉树序列化与反序列化(层序)
Posted 街头小瘪三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法19:LeetCode_二叉树序列化与反序列化(层序)相关的知识,希望对你有一定的参考价值。
本题为链接为https://leetcode.cn/problems/serialize-and-deserialize-binary-tree
想要搞懂本题,请先阅读我之前写的关于二叉树层序遍历文章算法8:LeetCode_二叉树的层序遍历_chen_yao_kerr的博客-CSDN博客
本体在可在LeetCode直接进行测试,但是需要替换变量 SEPARATOR 为 “,”. 因为这是我优化代码提取出来的一个公共的东西,写太多次怕出错.
package code03.二叉树_02; import java.util.LinkedList; import java.util.Queue; /** * https://leetcode.cn/problems/serialize-and-deserialize-binary-tree/ * * 二叉树按层序列化 与 反序列化 * */ public class Code01_SerializeAndReconstructTree static class TreeNode int val; TreeNode left; TreeNode right; TreeNode(int x) val = x; public static final String SEPARATOR = ","; public String serialize(TreeNode root) //边界值判断 if (root == null) return ""; //逐层搜集,首先收集根节点,并存入队列。印证思路第1步 StringBuffer sb = new StringBuffer(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); sb.append(root.val); while (!queue.isEmpty()) TreeNode node = queue.poll(); if (node.left != null) queue.add(node.left); sb.append(SEPARATOR).append(node.left.val); else sb.append(SEPARATOR).append("null"); if (node.right != null) queue.add(node.right); sb.append(SEPARATOR).append(node.right.val); else sb.append(SEPARATOR).append("null"); return sb.toString(); public TreeNode generateNode (String str) if ("null".equals(str)) return null; return new TreeNode(Integer.valueOf(str)); public TreeNode deserialize(String data) if (data == null || data.isEmpty()) return null; Queue<String> queue = new LinkedList<>(); String[] arr = data.split(SEPARATOR); for (int i = 0; i < arr.length; i++) queue.add(arr[i]); Queue<TreeNode> queueNode = new LinkedList<>(); TreeNode node = generateNode(queue.poll()); queueNode.add(node); TreeNode cur = null; while (!queueNode.isEmpty()) cur = queueNode.poll(); if (cur != null) cur.left = generateNode(queue.poll()); cur.right = generateNode(queue.poll()); queueNode.add(cur.left); queueNode.add(cur.right); return node; public static void main(String[] args) TreeNode tree = new TreeNode(1); tree.left = new TreeNode(2); tree.right = new TreeNode(3); tree.left.left = new TreeNode(4); tree.right.right = new TreeNode(5); tree.left.left.left = new TreeNode(6); Code01_SerializeAndReconstructTree test = new Code01_SerializeAndReconstructTree(); String str = test.serialize(tree); System.out.println(str); TreeNode node = test.deserialize(str); System.out.println("===========测试完毕,debug查看node================");
以上是关于算法19:LeetCode_二叉树序列化与反序列化(层序)的主要内容,如果未能解决你的问题,请参考以下文章