剑指offer题62

xiaoxiao2021-02-28  94

package jianzhioffer; import java.util.Scanner; import jianzhioffer.BinaryTree; /** * 请实现两个函数,分别用来序列化和反序列化二叉树 * 所谓序列化指的是遍历二叉树为字符串;所谓反序列化指的是依据字符串重新构造成二叉树。 */ /* //树节点 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution62 { /* * 依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉树时碰到Null指针时,这些Null指针被序列化为一个特殊的字符“#”。 * 另外,结点之间的数值用逗号隔开。 */ static int index = -1; //计数变量 static String Serialize(TreeNode root) { StringBuffer sb = new StringBuffer(); if(root == null){ sb.append("#,"); return sb.toString(); } sb.append(root.val + ","); sb.append(Serialize(root.left)); sb.append(Serialize(root.right)); return sb.toString(); } static TreeNode Deserialize(String str) { index++; int len = str.length(); if(index >= len){ return null; } String[] newstr = str.split(","); TreeNode node = null; if(!newstr[index].equals("#")){ node = new TreeNode(Integer.valueOf(newstr[index])); node.left = Deserialize(str); node.right = Deserialize(str); } return node; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); TreeNode tree1 = new TreeNode(5); TreeNode tree2 = new TreeNode(3); TreeNode tree3 = new TreeNode(7); TreeNode tree4 = new TreeNode(2); TreeNode tree5 = new TreeNode(4); TreeNode tree6 = new TreeNode(6); TreeNode tree7 = new TreeNode(8); tree1.left = tree2; tree1.right = tree3; tree2.left = tree4; tree2.right = tree5; tree3.left = tree6; tree3.right = tree7; System.out.println(Serialize(tree1)); BinaryTree bt = new BinaryTree(); System.out.println("反序列化二叉树的前序遍历结果:"); bt.preOrder(Deserialize(Serialize(tree1))); } }
转载请注明原文地址: https://www.6miu.com/read-78383.html

最新回复(0)