剑指offer系列35----序列化二叉树

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列35----序列化二叉树相关的知识,希望对你有一定的参考价值。

【题目】

* 请实现两个函数,分别用来序列化和反序列化二叉树
* 1
/ \
2 3
/\ /\
4 5 6 7
*
* 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
* 而反序列化的结果则是输出一棵二叉树。

 1 package com.exe7.offer;
 2 
 3 /**
 4  * 请实现两个函数,分别用来序列化和反序列化二叉树
 5  * 1
 6   /  7  2    3
 8  /\    / 9 4  5   6  7
10  *                 
11  * 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
12  * 而反序列化的结果则是输出一棵二叉树。        
13  * @author WGS
14  *
15  */
16 public class SerializeBiTree {
17     static class TreeNode{
18         int val=0;
19         TreeNode left=null;
20         TreeNode right=null;
21         TreeNode next=null;
22         public TreeNode(int val){
23             this.val=val;
24         }
25     }
26     
27     //序列化  前序
28     public String serialize(TreeNode pRoot){
29         
30         StringBuilder sb=new StringBuilder();
31         if(pRoot==null){
32             sb.append("#,");
33             return sb.toString();
34         }
35         sb.append(pRoot.val+",");
36         sb.append(serialize(pRoot.left));
37         sb.append(serialize(pRoot.right));
38         return sb.toString();
39         
40     }
41     //反序列化 相当于创建二叉树的过程
42     int p=-1;
43     public TreeNode deSerialize(String strIn){
44         p++;
45         if(p>strIn.length())
46             return null;
47         String[] strArr=strIn.split(",");
48         TreeNode node=null;
49         if(!strArr[p].equals("#")){
50             node=new TreeNode(Integer.valueOf(strArr[p]));
51             node.left=deSerialize(strIn);
52             node.right=deSerialize(strIn);
53         }
54         return node;
55         
56     }
57     public void preOrder(TreeNode node){
58         if(node==null) return;
59         System.out.print(node.val+"  ");
60         preOrder(node.left);
61         preOrder(node.right);
62     }
63     public static void main(String[] args) {
64         SerializeBiTree s=new SerializeBiTree();
65         
66         //反序列化
67         String strIn=("1,2,#,#,3,4,#,7,#,#,5,#,#,");
68         TreeNode tempNode=s.deSerialize(strIn);
69         s.preOrder(tempNode);//前序遍历
70         
71         System.out.println("------------------------");
72         //序列化  结果: 1,2,4,#,#,5,#,#,3,6,#,#,7,#,#,
73 /*
74            1
75           / 76          2    3
77         /\    /78        4  5   6  7
79  * */
80         TreeNode root=new TreeNode(1);
81         TreeNode node1=new TreeNode(2);
82         TreeNode node2=new TreeNode(3);
83         TreeNode node3=new TreeNode(4);
84         TreeNode node4=new TreeNode(5);
85         TreeNode node5=new TreeNode(6);
86         TreeNode node6=new TreeNode(7);
87         root.left=node1;//2
88         root.right=node2;//3
89         node1.left=node3;//4
90         node1.right=node4;//5
91         node2.left=node5;//6
92         node2.right=node6;//7
93         
94         String str=s.serialize(root);
95         System.out.println(str);
96     }
97 
98 }

 

以上是关于剑指offer系列35----序列化二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer系列——61.序列化二叉树??

※剑指offer系列50:序列化二叉树

872. 叶子相似的树 / 剑指 Offer 33. 二叉搜索树的后序遍历序列 / 剑指 Offer 34. 二叉树中和为某一值的路径 / 剑指 Offer 35. 复杂链表的复制

剑指offer系列——重建二叉树

剑指OFFER 序列化二叉树

Java 剑指offer(37) 序列化二叉树