序列化二叉树leetcode

来源:互联网 发布:珠海长隆 知乎 编辑:程序博客网 时间:2024/06/03 12:51

题目描述
请实现两个函数,分别用字符串来序列化和反序列化二叉树
解题过程:我设计的序列化过程是“值(左子树,右子树)”

import java.util.Stack;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    String Serialize(TreeNode root) {        if(root==null) return "#";        String left=Serialize(root.left);        String right=Serialize(root.right);        return root.val+"("+left+","+right+")";  }    TreeNode Deserialize(String str) {     if(str==null||str.equals("#")) return null;        char[] c=str.toCharArray();        int s=0,i=0,count=0,sum=0,len=c.length;        while(s<len&&c[s]>='0'&&c[s]<='9') { sum=sum*10+(c[s]-'0');  s++;}        i=s+1;       // System.out.println(str+"length:"+c.length+"---sum:"+sum);        TreeNode node=new TreeNode(sum);        TreeNode left,right;        if(s>=len) return node;        if(c[s]=='#'){ return null;}               //System.out.println("--------------");        if(s<len&&c[++s]=='#'){ left=null;s++;}        else {            count=1;            while(s<len&&c[s]!='('){            if(c[s]==','){            count=0;            s--;            break;            }                  s++;            }            s++;            while(s<len&&count!=0){            if(c[s]=='(')count++;            if(c[s]==')')count--;            s++;        }          //  System.out.println("end:"+s+"---str:"+str.substring(i,s));            left=Deserialize(str.substring(i,s));        }      //  System.out.println("right:"+(s+1)+"---str:"+str.substring(s+1,str.length()-1));        right=Deserialize(str.substring(s+1,str.length()-1));        node.left=left;        node.right=right;        return node;  }}
0 0
原创粉丝点击