一、树的序列化 和反序列化
1) 将二叉树进行序列化 和反序列化; 使用的是前序.
1 package com.tree; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 6 // 将一个两叉树 序列化成 字符串 ; 7 // 和将一字符串 反序列为一个树. 8 public class TreeNode_Serialization { 9 public static void main(String[] args) { 10 TreeNode_Serialization s = new TreeNode_Serialization(); 11 String str = "2!3!10!#!#!12!123!#!#!#!18!100!#!#!#!"; // 前序 12 TreeNode node = s.pre_deserializationTreeNode(str); 13 s.test(node); 14 System.out.println(); 15 System.out.println(s.pre_serializTreeNode(node)); 16 } 17 // 将一个两叉树 序列化成 字符串 18 public String pre_serializTreeNode(TreeNode tree) { 19 if (tree == null) { 20 return "#!"; 21 } 22 String str = tree.val + "!"; 23 str += pre_serializTreeNode(tree.left); 24 str += pre_serializTreeNode(tree.right); 25 return str; 26 } 27 // 将一个 字符串 反序列为一个树;// 前序遍历反序列化 28 public TreeNode pre_deserializationTreeNode(String str) { 29 String[] arrStr = str.split("!"); 30 Queue<String> qu = new LinkedList<String>(); 31 for (String s : arrStr) { 32 qu.add(s); 33 } 34 return pre_deserializationTreeNodeCore(qu); 35 } 36 // 前序遍历反序列化。 37 private TreeNode pre_deserializationTreeNodeCore(Queue<String> qu) { 38 String str = qu.poll(); 39 TreeNode tree = new TreeNode(); 40 if ("#".equals(str)) { 41 return null; 42 } 43 tree.left = pre_deserializationTreeNodeCore(qu); 44 tree.val = Integer.valueOf(str); 45 tree.right = pre_deserializationTreeNodeCore(qu); 46 return tree; 47 } 48 public void test(TreeNode tree) { 49 if (tree != null) { 50 test(tree.left); 51 System.out.print(tree.val + " "); 52 test(tree.right); 53 } 54 } 55 }
2) 将二叉树进行序列化 和反序列化; 使用的是层次遍历.
二 、树的遍历(前中后【递归与非递归】,层次,显示结构的层次遍历)
原文地址:https://www.cnblogs.com/vincentbnu/p/9463734.html
时间: 2024-10-01 03:09:54