剑指Offer_61_序列化二叉树
2016-09-01 10:06
302 查看
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树解题思路
使用前序遍历,将遇到的结点添加到字符串中,遇到null则将一个#添加要序列化字符串中。反序列化时,每次读取根结点,然后读取其左结点,遇到#(null)时,返回上层。实现
/*树结点定义*/ 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) { StringBuilder sb = new StringBuilder(); serialize(root, sb); return sb.toString(); } private void serialize(TreeNode root, StringBuilder sb) { if (root == null) { sb.append("#,"); return; } sb.append(root.val + ","); serialize(root.left, sb); serialize(root.right, sb); } private class Result{ TreeNode node; int pos; Result(TreeNode node, int pos){ this.node = node; this.pos = pos; } } TreeNode Deserialize(String str) { if (str == null || str.length() <= 0) return null; String[] strs = str.split(","); Result re = deserialize(strs, 0); return re.node; } private Result deserialize(String[] str, int i) { TreeNode root = null; if (i < str.length - 1){ if ("#".equals(str[i])) return new Result(null, i+1); root = new TreeNode(Integer.parseInt(str[i])); Result l = deserialize(str, i + 1); root.left = l.node; Result r = deserialize(str, l.pos); root.right = r.node; return new Result(root, r.pos); } return new Result(root, i+1); } }
相关文章推荐
- (C++)剑指offer-61:序列化二叉树(树)(再理解)
- 【剑指offer】题61:二叉树序列化、反序列化
- 剑指Offer--062-序列化二叉树
- 剑指offer 61 - 按之字形打印二叉树
- 剑指offer 61题 【树】按之字形顺序打印二叉树
- 剑指offer——序列化,反序列化二叉树(好题)
- 剑指offer | 训练题61:二叉树搜索的第K个结点
- 剑指offer——面试题62:序列化二叉树
- 剑指offer 面试题61 按之字形顺序打印二叉树
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 【剑指offer】题61:之字打印二叉树
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer——序列化二叉树___
- 【剑指Offer】面试题62:序列化二叉树
- 剑指offer:二叉树的序列化和反序列化
- 剑指Offer——序列化二叉树
- 剑指offer——面试题62:序列化二叉树
- 【剑指offer】第三十六题(二叉搜索树与双向链表) 和 第三十七题(序列化二叉树)
- 【剑指Offer学习】【面试题62:序列化二叉树】
- 剑指offer-序列化二叉树