劍指 Offer 37. 序列化二叉樹

題目

序列化是將一個數據結構或者對象轉換為連續的比特位的操作,進而可以將轉換后的數據存儲在一個文件或者內存中,同時也可以通過網絡傳輸到另一個計算機環境,采取相反方式重構得到原數據。

請設計一個算法來實現二叉樹的序列化與反序列化。這里不限定你的序列 / 反序列化算法執行邏輯,你只需要保證一個二叉樹可以被序列化為一個字符串并且將這個字符串反序列化為原始的樹結構。

提示: 輸入輸出格式與 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]

image.png

解題思路

  • 序列化時,先序遍歷二叉樹,使用null表示空節點,使用’,'分隔每一個節點
  • 反序列化時,將字符串使用’,'分割回去原來的若干個節點元素,同樣先序遍歷這些節點,就能還原出這顆二叉樹

代碼

/*** 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));

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ie8 ajaxSubmit 上傳文件提示下載

轉載 解決ie下ajaxsubmit上傳文件提示下載文件問題 主要是應為放回類型為json,返回text/html轉載于:https://www.cnblogs.com/yang-C-J/p/8963278.html

一個簡單的 js 時間對象創建

JS中獲取時間很常見,湊湊熱鬧,也獲取一個時間對象試試 首先,先了解js的獲取時間函數如下: var myDate new Date(); //創建一個時間對象 myDate.getYear(); // 獲取當前年份(2位&#x…

裁判打分_內在的裁判偏見

裁判打分News flash: being an umpire is hard. Their job is to judge whether a ball that’s capable of moving upwards of 100 MPH or breaking 25 inches crossed through an imaginary zone before being caught. I don’t think many would argue that they have it ea…

數據庫sql課程設計_SQL和數據庫-初學者完整課程

數據庫sql課程設計In this course, Mike Dane will teach you database management basics and SQL.在本課程中,Mike Dane將教您數據庫管理基礎知識和SQL。 The course starts off with Mike helping you install MySQL on Windows or Mac. Then he explores topic…

LCP 07. 傳遞信息

小朋友 A 在和 ta 的小伙伴們玩傳信息游戲,游戲規則如下: 有 n 名玩家,所有玩家編號分別為 0 ~ n-1,其中小朋友 A 的編號為 0 每個玩家都有固定的若干個可傳信息的其他玩家(也可能沒有)。傳信息…

微信公眾號自動回復加超鏈接最新可用實現方案

你在管理微信號時是否會有自動回復或者在關鍵字觸發自動回復加一個超鏈接的需求呢&#xff1f;例如下圖像王者榮耀這樣&#xff1a; 很多有開發經驗的朋友都知道微信管理平臺會類似富文本編輯器&#xff0c;第一想到的解決方案會是在編輯框中加<a href網址 >顯示文字<…

devops開發模式流程圖_2020 Web開發人員路線圖–成為前端,后端或DevOps開發人員的視覺指南

devops開發模式流程圖There are many ways you can go about picking up the skills you need to become a developer.您可以采用多種方法掌握成為開發人員所需的技能。 There are linear curriculums that teach you a bit of everything - like freeCodeCamps full stack de…

從Jupyter Notebook切換到腳本的5個理由

意見 (Opinion) 動機 (Motivation) Like most people, the first tool I used when started learning data science is Jupyter Notebook. Most of the online data science courses use Jupyter Notebook as a medium to teach. This makes sense because it is easier for be…

leetcode 1833. 雪糕的最大數量

夏日炎炎&#xff0c;小男孩 Tony 想買一些雪糕消消暑。 商店中新到 n 支雪糕&#xff0c;用長度為 n 的數組 costs 表示雪糕的定價&#xff0c;其中 costs[i] 表示第 i 支雪糕的現金價格。Tony 一共有 coins 現金可以用于消費&#xff0c;他想要買盡可能多的雪糕。 給你價格…

MVC架構 -- 初學試水選課管理系統

項目文件網站地址&#xff1a;http://www.gegecool.cn:90/ 第一次對MVC 進行轉載于:https://www.cnblogs.com/wtusoso/p/8032120.html

rest api 示例2_REST API教程– REST Client,REST Service和API調用通過代碼示例進行了解釋

rest api 示例2Ever wondered how login/signup on a website works on the back-end? Or how when you search for "cute kitties" on YouTube, you get a bunch of results and are able to stream off of a remote machine?有沒有想過網站上的登錄/注冊在后端如…

win10子系統linux編譯ffmpeg

android-ndk-r14b(linux版) ffmpeg-4.0 開啟win10子系統&#xff08;控制面板-》程序和功能-》啟用或關閉Windows功能 然后在 適用與 Linux 的 Windows 子系統前面打勾&#xff09; 然后點擊確定&#xff0c;等待安裝&#xff0c;電腦會重啟 然后在win10應用商店 搜索ubuntu安裝…

ip登錄打印機怎么打印_不要打印,登錄。

ip登錄打印機怎么打印Often on Python, especially as a beginner, you might print( ) a variable in order to see what is happening in your program. It is possible if you rely on too many print statements throughout your program you will face the nightmare of h…

leetcode 451. 根據字符出現頻率排序

給定一個字符串&#xff0c;請將字符串里的字符按照出現的頻率降序排列。 示例 1:輸入: "tree"輸出: "eert"解釋: e出現兩次&#xff0c;r和t都只出現一次。 因此e必須出現在r和t之前。此外&#xff0c;"eetr"也是一個有效的答案。 示例 2:輸入…

Spring-Security 自定義Filter完成驗證碼校驗

Spring-Security的功能主要是由一堆Filter構成過濾器鏈來實現&#xff0c;每個Filter都會完成自己的一部分工作。我今天要做的是對UsernamePasswordAuthenticationFilter進行擴展&#xff0c;新增一個Filter&#xff0c;完成對登錄頁面的校驗碼的驗證。下面先給一張過濾器的說明…

如何使用Ionic和Firebase在短短三天內創建冠狀病毒跟蹤器應用程序

I am really fond of Hybrid App technologies – they help us achieve so much in a single codebase. Using the Ionic Framework, I developed a cross-platform mobile solution for tracking Coronavirus cases in just 3 days. 我真的很喜歡Hybrid App技術-它們可以幫助…

二、Java面向對象(7)_封裝思想——this關鍵字

2018-04-30 this關鍵字 什么是this: 表示當前對象本身&#xff0c;或當前類的一個實例&#xff0c;通過 this 可以調用本對象的所有方法和屬性。 this主要存在于兩個地方&#xff1a; 1&#xff09;構造函數&#xff1a;此時this表示調用當前創建的對象 2&#xff09;成員方法中…

機器學習模型 非線性模型_調試機器學習模型的終極指南

機器學習模型 非線性模型You’ve divided your data into a training, development and test set, with the correct percentage of samples in each block, and you’ve also made sure that all of these blocks (specially development and test set) come from the same di…

leetcode 645. 錯誤的集合

集合 s 包含從 1 到 n 的整數。不幸的是&#xff0c;因為數據錯誤&#xff0c;導致集合里面某一個數字復制了成了集合里面的另外一個數字的值&#xff0c;導致集合 丟失了一個數字 并且 有一個數字重復 。 給定一個數組 nums 代表了集合 S 發生錯誤后的結果。 請你找出重復出…

Linux環境變量總結

現在每天測試到時候會與Linux打交道&#xff0c;自然也會用到環境變量了。看了網上幾篇文章&#xff0c;結合自己到實踐和看法&#xff0c;總結以下Linux的環境變量吧。一、什么是環境變量&#xff1f;環境變量相當于給系統或用戶應用程序設置的一些參數, 具體起什么作用這當然…