二叉树25:序列化二叉树

来源:互联网 发布:整治网络传销可丽金 编辑:程序博客网 时间:2024/05/16 18:52

题目:请实现两个函数,分别用来序列化和反序列化二叉树

思路:前面Tree4已经研究过了二叉树的序列化和反序列化问题,对于序列化和反序列化,默认就是使用先序遍历来进行的,且无论是空节点还是非空的结点都需要进行遍历,对于空节点通常标记位“#”,每个结点值的结束使用“,”来进行,OJ一般不使用“!”。

public class Solution {    //使用递归先序遍历对二叉树进行序列化    String Serialize(TreeNode root) {        //注意:Java中String是不可改变的,不能进行引用传递,改为使用StringBuffer        StringBuilder res=new StringBuilder("");        //调用递归方法完成二叉树遍历序列化        this.preOrder(root,res);        //返回结果        return res.toString();  }        //递归方法,用来先序遍历二叉树同时将其序列化为字符串    private void preOrder(TreeNode root, StringBuilder str){        //递归结束的边界条件        if(root==null){            str.append("#,");            return;        }                //先遍历根结点        str.append(root.val+",");        //遍历左子树        this.preOrder(root.left,str);        //遍历右子树        this.preOrder(root.right,str);    }    //已知由先序遍历得到的字符串str,将其恢复为一棵二叉树,并返回根结点    TreeNode Deserialize(String str) {         //特殊输入        if(str==null||str.length()<=0) return null;        //将字符串按照","拆分为数组        String[] strs=str.split(",");        //调用递归方法deSerializeCore()方法来实现重建二叉树的功能,返回根结点        TreeNode root=this.deSerializeCore(strs);        //注意返回结果        return root;  }    //注意:这里关键是要设计一个成员变量index用于在每次递归调用时能够使用不同的字符串来建立根结点    int index=0;//设计一个递归方法deSerializeCore用于使用strs[]数组的后面部分元素来建立一棵二叉树,并返回根结点//递归方法可以有返回值或者没有返回值,不影响使用,如果有返回值要注意接收    private TreeNode deSerializeCore(String[] strs){        if("#".equals(strs[index])){            //如果遇到的是#表示空节点,不再建立子树,这个结点null就是子树的根结点返回            //千万注意,返回前要将index向下移动,之后使用的是strs[]中后面部分的元素            index++;            return null;        }else{            //如果不为空结点,则先恢复这个结点            TreeNode newNode=new TreeNode(0);            newNode.val=Integer.parseInt(strs[index]);            //千万注意在递归调用之前(使用了一个元素建立结点之后),要将index向后移动1位            index++;            //恢复左子树            newNode.left=this.deSerializeCore(strs);            //恢复右子树            newNode.right=this.deSerializeCore(strs);            //建立二叉树完成,返回根结点            return newNode;        }    }}

0 0
原创粉丝点击