首頁技術(shù)文章正文

二叉樹序列化與反序列化的Java實(shí)現(xiàn)

更新時(shí)間:2018-12-19 來源:黑馬程序員 瀏覽量:

  二叉樹是樹的特殊一種,在筆試中較為常見,其具有如下特點(diǎn):

  1、每個(gè)結(jié)點(diǎn)最多有兩顆子樹,結(jié)點(diǎn)的度最大為2。

  2、左子樹和右子樹是有順序的,次序不能顛倒。

  3、即使某結(jié)點(diǎn)只有一個(gè)子樹,也要區(qū)分左右子樹。

  import java.util.Arrays;

  import java.util.LinkedList;

  import java.util.Queue;

  public class Demo {

  public String serialize(TreeNode root) {

  if (root == null) return "";

  StringBuilder encodedStr = new StringBuilder();

  encode(root,encodedStr);

  return encodedStr.substring(1).toString();

  }

  public void encode(TreeNode root,StringBuilder sb){

  if (root == null){

  sb.append(",#");

  return;

  }

  sb.append(",").append(root.val);

  encode(root.left,sb);

  encode(root.right,sb);

  }

  public TreeNode deserialize(String data) {

  if (data.length() == 0) return null;

  Queuequeue = new LinkedList<>(Arrays.asList(data.split(",")));

  return decode(queue);

  }

  public TreeNode decode(Queuequeue){

  if (queue.isEmpty()) return null;

  String cur = queue.poll();

  if (cur.equals("#")) return null;

  TreeNode root = new TreeNode(Integer.valueOf(cur));

  root.left = decode(queue);

  root.right = decode(queue);

  return root;

  }

  }

  public class TreeNode {

  int val;

  TreeNode left;

  TreeNode right;

  TreeNode(int x) { val = x; }

  }


作者:黑馬程序員JavaEE培訓(xùn)學(xué)院

首發(fā): http://java.itheima.com

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!