剑指offer-序列化二叉树和反序列化二叉树-java

0人阅读 评论(0) 收藏 举报
分类:

题目描述

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

思路解析

序列化二叉树,可以用前序遍历的方法,先根节点、然后左子树、后边右子树。注意要用StringBuffer,因为可以直接更改字符串;如果根节点为空,那么直接返回“#”结束。这个也是递归的结束标志

代码

import java.lang.StringBuffer;
import java.lang.String;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public int index=-1;
    String Serialize(TreeNode root) {
        StringBuffer s =new StringBuffer();//StringBuffer线程安全的优势
        if(root == null){
            s.append("#,");//以"#"结束
            return s.toString();//返回此序列中数据的字符串表示形式。
        }
        s.append(root.val+",");//注意是把根节点的值放入StringBuffer中
        s.append(Serialize(root.left));//先左子树后右子树,这是先序遍历的方法
        s.append(Serialize(root.right));
        return s.toString();//返回此序列中数据的字符串表示形式。
  }
    TreeNode Deserialize(String str) {
        index++;
        String[] strr = str.split(",");//split以“,”分开存为数组
        int len = strr.length;
        if(index >= len)
            return null;
        TreeNode node = null;
        if(!strr[index].equals("#")){//数组中相等的用equals()是“#”
            node = new TreeNode(Integer.valueOf(strr[index]));
            node.left = Deserialize(str);
            node.right = Deserialize(str);
        }
        return node;
  }
}

查看评论

剑指offer-----序列化和反序列化二叉树(java版)

一 题目 请实现两个函数,分别用来序列化和反序列化二叉树 二 思路 序列化二叉树时,根据前序遍历方式将二叉树节点的值转换为字符串,如果二叉树节点为空,则以‘#’代替,每个节点的值以‘...
  • sniperken
  • sniperken
  • 2016-12-27 10:16:56
  • 1383

剑指offer——序列化二叉树

题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。思路:首先得理解题目的意思,序列化就是返回一个带有#和逗号的字符串。反序列化就是根据带有#和逗号的字符串返回一棵二叉树。比如对于二叉树 1...
  • sbq63683210
  • sbq63683210
  • 2016-06-23 21:12:39
  • 1235

剑指offer:二叉树的序列化和反序列化

二叉树的序列化和反序列化 //BinaryTreeNode.h文件 #ifndef __BINARY_TREE_NODE__ #define __BINARY_TREE_NODE__ struct...
  • wly_2014
  • wly_2014
  • 2016-04-16 22:52:23
  • 338

剑指offer(64):序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树。
  • u011080472
  • u011080472
  • 2016-05-01 16:23:21
  • 2274

剑指offer(C++)——序列化二叉树

题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 解释:序列化的意思是指将一些特定的数据结构,变成有格式信息的字符串。例如对一个链表,可以将1->2->3->4->NULL序列化为"1,...
  • YF_Li123
  • YF_Li123
  • 2017-04-19 09:52:59
  • 609

剑指Offer--039-二叉树的深度

链接 牛客OJ:二叉树的深度 九度OJ:http://ac.jobdu.com/problem.php?pid=1350 GitHub代码: 039-二叉树的深度 C...
  • gatieme
  • gatieme
  • 2016-05-07 20:39:04
  • 1366

【剑指offer】二叉树的深度

题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 方法一分析:主要思想就是层序遍历,就是有遍历上一层的每一个节点,得到下...
  • cdwxx1234
  • cdwxx1234
  • 2017-07-15 14:27:07
  • 180

二叉树的序列化和反序列化实现(C++)

题目: 实现二叉树的序列化和反序列化的函数。 思路:         二叉树的序列化 即给定二叉树的头指针,按照某种遍历方式将所有结点链接为一个数组或字符串(/指针)。        ...
  • u013575812
  • u013575812
  • 2015-12-05 14:39:49
  • 1492

序列化和反序列化二叉树(java版)

【题目描述】请实现两个函数,分别用来序列化和反序列化二叉树【解题思路1】 //1. 利用前序遍历序列化二叉树,然后从记录的字符串中反序列化二叉树。 //2. 遇到空节点需要用特殊字符加以标记。如“...
  • ouyangyanlan
  • ouyangyanlan
  • 2017-06-06 11:15:04
  • 2324

剑指offer-二叉树的序列化和反序列化(困惑)-Java

今天在牛客上做这个题,发现一个很奇怪的事,以下第一个代码能AC,第二个却不能,但其实我个人觉得第二个更好,也不知道牛客的测试用例是怎么写的。 题目描述 请实现两个函数,分别用来序列化和反序列化...
  • d12345678a
  • d12345678a
  • 2017-01-07 22:15:29
  • 747
    个人资料
    持之以恒
    等级:
    访问量: 408
    积分: 442
    排名: 11万+
    文章存档