当前位置: 代码迷 >> 综合 >> 第三章 二叉树问题(二叉树的序列化和反序列化)
  详细解决方案

第三章 二叉树问题(二叉树的序列化和反序列化)

热度:13   发布时间:2023-10-11 12:15:04.0

【题目】

        二叉树被记录成文件的过程叫做二叉树的序列化,通过文件内容重建二叉树的过程叫做二叉树的反序列化,给定一颗二叉树的头节点head,已知二叉树节点值的类型为32位整型。请设计一种二叉树序列化和反序列化方案,并用代码实现。

【解答】

package zcy;import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;// 通过先序遍历实现序列化和反序列化
public class P107_NodeSerial {public static void main(String[] args) {Node node = new Node(12);node.left = new Node(3);node.right = new Node(5);String s = nodeSerialToStr(node);System.out.println(s);Node node1 = strToNode(s);preOrder(node1);}/*** 树序列化** @param head* @return*/public static String nodeSerialToStr(Node head) {if (head == null) {return "#!";}String res = head.value + "!";res += nodeSerialToStr(head.left);res += nodeSerialToStr(head.right);return res;}public static Node strToNode(String str) {String[] strs = str.split("!");Queue<String> queue = new LinkedList();for (String s : strs) {queue.add(s);}return serialToNode(queue);}/*** 字符串反序列化成树** @param queue* @return*/public static Node serialToNode(Queue<String> queue) {String s = queue.poll();if ("#".equals(s)) {return null;}Node node = new Node(Integer.parseInt(s));node.left = serialToNode(queue);node.right = serialToNode(queue);return node;}/*** 先序遍历** @param node*/public static void preOrder(Node node) {if (null == node) {return;}Stack<Node> s1 = new Stack<Node>();s1.add(node);while (!s1.isEmpty()) {Node cur = s1.pop();System.out.println(cur.value);if (cur.right != null) {s1.push(cur.right);}if (cur.left != null) {s1.push(cur.left);}}}public static class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;}}
}

  相关解决方案