剑指 Offer 37. 序列化二叉树
生活随笔
收集整理的這篇文章主要介紹了
剑指 Offer 37. 序列化二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
序列化是將一個數據結構或者對象轉換為連續(xù)的比特位的操作,進而可以將轉換后的數據存儲在一個文件或者內存中,同時也可以通過網絡傳輸到另一個計算機環(huán)境,采取相反方式重構得到原數據。
請設計一個算法來實現二叉樹的序列化與反序列化。這里不限定你的序列 / 反序列化算法執(zhí)行邏輯,你只需要保證一個二叉樹可以被序列化為一個字符串并且將這個字符串反序列化為原始的樹結構。
提示: 輸入輸出格式與 LeetCode 目前使用的方式一致,詳情請參閱 LeetCode 序列化二叉樹的格式。你并非必須采取這種方式,你也可以采用其他的方法解決這個問題。
示例 1:
輸入:root = [1,2,3,null,null,4,5]
輸出:[1,2,3,null,null,4,5]
示例 2:
輸入:root = []
輸出:[]
示例 3:
輸入:root = [1]
輸出:[1]
示例 4:
輸入:root = [1,2]
輸出:[1,2]
解題思路
- 序列化時,先序遍歷二叉樹,使用null表示空節(jié)點,使用’,'分隔每一個節(jié)點
- 反序列化時,將字符串使用’,'分割回去原來的若干個節(jié)點元素,同樣先序遍歷這些節(jié)點,就能還原出這顆二叉樹
代碼
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/public class Codec {// Encodes a tree to a single string.public void se(TreeNode root,StringBuilder strings) {if(root==null)strings.append("null").append(',');else {strings.append(root.val).append(',');se(root.left,strings);se(root.right,strings);}}public String serialize(TreeNode root) {StringBuilder builder = new StringBuilder(); se(root,builder);return builder.toString();}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {String[] strings = data.split(",");return de(strings);}int cur=0;public TreeNode de(String[] strings){if(cur>=strings.length||strings[cur].equals("null")){cur++;return null; }else {TreeNode c = new TreeNode(Integer.parseInt(strings[cur]));cur++;c.left =de(strings);c.right=de(strings);return c;}}}// Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root)); 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的剑指 Offer 37. 序列化二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男人梦到一堆蛇是什么情况
- 下一篇: LCP 07. 传递信息