牛客网刷题之序列化二叉树

来源:互联网 发布:语音读书软件下载 编辑:程序博客网 时间:2024/05/22 04:38

题目描述:

这里写图片描述

解题思路:

  首先我们得知道序列化是怎样的。二叉树序列化时,如果结点
不为空时,在转化val所得的字符之后添加一个’ , ‘作为分割如果是空节点则以 ‘#,‘ 代替。我们可以使用前序遍历,递归的将二叉树的值转化为字符。反序列化就是序列化的一个逆过程,首先得判断字符串是否为空,不为空的话就将字符串转化为字符串数组。如果每一下标的字符串不等于“#”(不为空),就强转为相应的值,递归来实现左右结点的转换。

题解:

private int index = -1;    String Serialize(TreeNode root) {        StringBuilder sb = new StringBuilder();        if(root == null){            sb.append("#,");            return sb.toString();        }        sb.append(root.val + ",");        sb.append(Serialize(root.left));        sb.append(Serialize(root.right));        return sb.toString();    }    TreeNode Deserialize(String str) {        index ++;        if(index >= str.length()){            return null;        }        String[] nodes = str.split(",");        TreeNode node = null;        if(! nodes[index].equals("#")){            node = new TreeNode(Integer.valueOf(nodes[index]));            node.left = Deserialize(str);            node.right = Deserialize(str);        }        return node;    }

ac结果:

这里写图片描述

0 0
原创粉丝点击