题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
对于处理二叉树的题目的几种思路:
(1)递归
(2)使用栈
(3)使用队列
连续刷的这几道题目都适用
import java.util.Queue; import java.util.LinkedList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { String Serialize(TreeNode root) { StringBuilder result = new StringBuilder(""); if(root != null){ //先访问根节点 result.append(String.valueOf(root.val)); //offer poll peek Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root);//需要根据队列中存储的元素来作为访问下一个节点的依据。 while(!queue.isEmpty()){ //把队列元素的左右子树进行访问,然后加入到队列中。 TreeNode head = queue.poll(); if(head.left!= null || head.right!= null){ if(head.left == null) result.append(",#"); else{ result.append("," + String.valueOf(head.left.val));