剑指 Offer 37. 序列化二叉树

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * 剑指 Offer 37. 序列化二叉树
 *
 *
 */

public class SolutionJz37 {
  public static class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
  }


  // Encodes a tree to a single string.
  public String serialize(TreeNode root) {
    return serializeTree(root);
  }

  private String serializeTree(TreeNode root) {
    StringBuffer stringBuffer = new StringBuffer();
    if (root == null) {
      return "None";
    }
    return stringBuffer
        .append(root.val)
        .append(",")
        .append(serializeTree(root.left))
        .append(",")
        .append(serializeTree(root.right)).toString();
  }

  // Decodes your encoded data to tree.
  public TreeNode deserialize(String data) {
    String[] dataArray = data.split(",");
    List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
    return deserializationHead(dataList);
  }

  private TreeNode deserializationHead(List<String> nodeStrings) {
    if (nodeStrings.get(0).equals("None")) {
      nodeStrings.remove(0);
      return null;
    }

    TreeNode root = new TreeNode(Integer.valueOf(nodeStrings.get(0)));
    nodeStrings.remove(0);
    root.left = deserializationHead(nodeStrings);
    root.right = deserializationHead(nodeStrings);

    return root;
  }

  public static void main(String args[]){
    TreeNode treeNode1 = new TreeNode(1);
    TreeNode treeNode2 = new TreeNode(2);
    TreeNode treeNode3 = new TreeNode(3);
    TreeNode treeNode4 = new TreeNode(4);
    TreeNode treeNode5 = new TreeNode(5);
    treeNode1.left = treeNode2;
    treeNode1.right = treeNode3;
    treeNode3.left = treeNode4;
    treeNode3.right = treeNode5;
    SolutionJz37 solutionJz37 = new SolutionJz37();
    String str = solutionJz37.serialize(treeNode1);
    System.out.println(str);
    TreeNode treeNode = solutionJz37.deserialize(str);
    String str2 = solutionJz37.serialize(treeNode);
    System.out.println(str2);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值