二叉樹序列化與反序列化的Java實現

本文章來源於傳智播客黑馬程序員黑馬論壇杭州校區:http://bbs.itheima.com/thread-431028-1-1.html

如各位老鐵需要相關技術文檔,都可以私信或回覆,小編會盡力分享滴❤️

插播一天小廣告:黑馬程序員成都中心java基礎12月25號開班

二叉樹是樹的特殊一種,在筆試中較為常見,其具有如下特點:1、每個結點最多有兩顆子樹,結點的度最大為2。2、左子樹和右子樹是有順序的,次序不能顛倒。3、即使某結點只有一個子樹,也要區分左右子樹。

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;

Queue<string> queue = new LinkedList<>(Arrays.asList(data.split(",")));/<string>

return decode(queue);

}

public TreeNode decode(Queue<string> queue){/<string>

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; }

}

如各位老鐵需要相關技術文檔,都可以私信或回覆,小編會盡力分享滴❤️

二叉樹序列化與反序列化的Java實現


分享到:


相關文章: