序列化以及反序列化二叉树
生活随笔
收集整理的這篇文章主要介紹了
序列化以及反序列化二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有些問題需要把二叉樹序列化,可用于傳輸或者保存等,當然,有些題目也需要你去序列化以及反序列化,你懂的!
二叉樹的定義如下:
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// 1 2// 3 4//初始化樹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?
總結
以上是生活随笔為你收集整理的序列化以及反序列化二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进制转换问题---例如把26进制转为10
- 下一篇: 网易笔试题:最大的奇约数