序列化以及反序列化二叉树

来源:互联网 发布:mac版的ps怎么破解 编辑:程序博客网 时间:2024/06/06 01:12

有些问题需要把二叉树序列化,可用于传输或者保存等,当然,有些题目也需要你去序列化以及反序列化,你懂的!

二叉树的定义如下:

package com.hbut.bean;public class TreeNode {private  TreeNode left;private TreeNode right;private int val;public TreeNode(int val) {super();this.val = val;}public TreeNode getLeft() {return left;}public void setLeft(TreeNode left) {this.left = left;}public TreeNode getRight() {return right;}public void setRight(TreeNode right) {this.right = right;}public int getVal() {return val;}public void setVal(int val) {this.val = val;}}


二叉树的序列化以及反序列化如下:

package com.hbut.test;import com.hbut.bean.TreeNode;public class TestTree {//二叉树如下//0//12//34//初始化树public static TreeNode initTree (){TreeNode root = new TreeNode(0);TreeNode one = new TreeNode(1);TreeNode two = new TreeNode(2);TreeNode three = new TreeNode(3);TreeNode four = new TreeNode(4);root.setLeft(one);root.setRight(two);one.setLeft(three);one.setRight(four);return root;}//先序遍历public static void preOrder(TreeNode root){if(root==null){return ;}System.out.print(root.getVal()+" ");preOrder(root.getLeft());preOrder(root.getRight());}//序列化二叉树public static String serialize(TreeNode root) {  StringBuilder builder = new StringBuilder();if(root==null){return "#,";}builder.append(root.getVal()+",");builder.append(serialize(root.getLeft()));builder.append(serialize(root.getRight()));return builder.toString();}//反序列化二叉树static int index=-1;public static TreeNode Deserialize(String str) {String [] s=str.split(",");index++;TreeNode node=null;if(index<str.length()){if(!"#".equals(s[index])){node = new TreeNode(Integer.parseInt(s[index]));node.setLeft(Deserialize(str));node.setRight(Deserialize(str));}}return node;}public static void main(String[] args) {TreeNode root=initTree();System.out.print("先序遍历:");preOrder(root);//测试序列化以及反序列化二叉树String s=serialize(root);System.out.println();System.out.print("序列化二叉树:"+s);System.out.println();//反序列化二叉树System.out.print("反序列化二叉树后(先序遍历):");preOrder(Deserialize(s));}}

运行结果如下:

先序遍历:0 1 3 4 2 
序列化二叉树:0,1,3,#,#,4,#,#,2,#,#,
反序列化二叉树后(先序遍历):0 1 3 4 2