JZ37序列化二叉樹

題目地址:序列化二叉樹_牛客題霸_牛客網

題目回顧:

解題思路:

首先,序列化就是將二叉樹的節點值放入一個字符串中,這里可以按照前序遍歷的思路來進行操作,謙虛遍歷是:根左右的情況,其中根據題意我們用"#"來表示空節點,用!來表示節點與節點之間的分割。

而反序列化就是根據序列化得到的字符串將二叉樹進行重建操作,這里類似于加密解密的過程。由于我們在序列化的時候采用的是前序遍歷,因此在反序列化的過程中,我們也要采用前序遍歷。

首先處理空樹的情況,在空樹時,我們返回”#“,然后調用遞歸函數前序遞歸遍歷二叉樹。

在前序遞歸函數中,如果遇到非空節點會將其添加到str中,當然也包括表示節點與節點間分割的!符。然后依次遞歸它的左子樹和右子樹。

index則表示的是序列中的下標。

進行反序列化的時候,首先處理空樹的情況,也就是說如果字符串是”#“表示這是一個空樹。如果不是,就調用反序列化的遞歸函數前序遞歸重建二叉樹。在這個遞歸函數當中,如果遇到”#“表示當前節點是空節點,如果遇到數字則根據!符來進行分割操作,同時將數字加入到節點中。根據前序遍歷根左右的順序依次遞歸左右子樹。

整體代碼:

 public int index = 0; private void SerializeFunction(TreeNode root, StringBuilder str){if(root == null){str.append('#');return;}str.append(root.val).append('!');SerializeFunction(root.left, str); SerializeFunction(root.right, str);}//序列化public String Serialize(TreeNode root) {if(root == null) return "#";StringBuilder res = new StringBuilder();SerializeFunction(root, res);return res.toString();}private TreeNode DeserializeFunction(String str){if(str.charAt(index) == '#'){ index++;return null;}int val = 0;while(str.charAt(index) != '!' && index != str.length()){ val = val * 10 + ((str.charAt(index)) - '0');index++;}TreeNode root = new TreeNode(val);if(index == str.length()) return root;elseindex++;root.left = DeserializeFunction(str);  root.right = DeserializeFunction(str);return root;}//反序列化public TreeNode Deserialize(String str) {if(str == "#") return null;TreeNode res = DeserializeFunction(str);return res;}

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

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

相關文章

什么是React?React與VU的優缺點有哪些?

什么是React?什么是VUE? 維基百科上的概念解釋,Vue.js是一個用于創建用戶界面的開源MVVM前端JavaScript框架,也是一個創建單頁應用的Web應用框架。Vue.js由尤雨溪(Evan You)創建,由他和其他活躍…

Cmd部署HexoGithub443問題

git config --global http.proxy “localhost:7890” 配置下代理即可 本文由 mdnice 多平臺發布

微信小程序 地圖map(電子圍欄圓形和多邊形)

正常情況下是沒有手機上畫電子圍欄的,公共平臺上我也沒找到,所以走了一個歪點子,就是給地圖添加點擊事件,記錄點的位置,在畫到電子圍欄上就是添加電子圍欄了,如果只是顯示電子圍欄就簡單了 一、多邊形電子…

2023.8.12號論文閱讀

文章目錄 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法實驗結果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法實驗結果 TriFormer: A Multi-mod…

macos搭建python3虛擬環境

我們知道macos自帶的python版本是Python2.7, 這個版本比較老而且往往和我們的工程不兼容,所以就得需要我們升級Python版本, 我們不建議直接升級macos自帶的本地Python2.7, 因為macos有一些基礎軟件是依賴于Python2.7的,如果動了遇到問題想再…

日志框架及其使用方法

log4j和logBack,同一個人寫的,logBack為log4j的升級版,SpringBoot中默認集成logBack 作用:記錄軟件發布后的一些bug,以及數據是怎樣被操作的 傳統開發弊端: 1.日志直接輸出在控制臺,關閉控制臺后,日志消…

Netty:在一個ByteBuf中尋找另外一個ByteBuf出現的位置

說明 利用ByteBufUtil的indexOf(ByteBuf needle, ByteBuf haystack)函數可以在haystack中尋找needle出現的位置。如果沒有找到,返回-1。 示例 在一個ByteBuf 中找到了另外一個ByteBuf package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.…

Linux: network: tools: tcpdump,抓取vlan包需要注意的事情;不然會出現LLC協議

https://bugzilla.redhat.com/show_bug.cgi?id498981#c4 https://serverfault.com/questions/544651/vlan-tags-not-shown-in-packet-capture-linux-via-tcpdump 如果不加-e參數,抓取不到 vlan信息,會導致wireshark解析出現問題。因為,抓到…

AirServer是什么軟件,手機屏幕投屏電腦神器

什么是 AirServer? AirServer 是適用于 Mac 和 PC 的先進的屏幕鏡像接收器。 它允許您接收 AirPlay 和 Google Cast 流,類似于 Apple TV 或 Chromecast 設備。AirServer 可以將一個簡單的大屏幕或投影儀變成一個通用的屏幕鏡像接收器 ,是一款…

PDF Expert 3.3 for mac

PDF Expert是一款專業的PDF編輯和閱讀工具。它可以幫助用戶在Mac、iPad和iPhone等設備上查看、注釋、編輯、填寫和簽署PDF文檔。 以下是PDF Expert的特點: PDF編輯:PDF Expert提供了豐富的PDF編輯功能,包括添加、刪除、移動、旋轉、縮放、裁…

《貧窮的本質》閱讀筆記

《貧窮的本質》閱讀筆記 2023年8月11日在杭州小屋讀完,對于窮,我可有太多想說的了。可以說自己活這么大以來,一直在擺脫貧窮,也將會窮盡一生去避免貧窮。作為一個窮人該如何去擺脫貧窮,我覺得沒有一個確切的答案&#…

windows 安裝免費3用戶ccproxy ubuntu 代理上網

Windows 上進行安裝 ubuntu 上進行設置 方法一 (臨時的手段) 如果僅僅是暫時需要通過http代理使用apt-get,您可以使用這種方式。 在使用apt-get之前,在終端中輸入以下命令(根據您的實際情況替換yourproxyaddress和proxyport)。 終…

Linux防火墻firewalldiptables(2)iptables開放指定端口開放指定端口

一、CentOs6 iptables基本操作 # chkconfig --list | grep iptables 查看防火墻的服務 # chkconfig iptables off 永久關閉防火墻 #chkconfig iptables on 永久開啟防火墻# service status iptables 查看防火墻狀態 # service start iptables 啟動防火墻 # service stop ipta…

HCIA---路由器--靜態路由

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 目錄 前言 一.路由器簡介 二.路由器轉發原理 三.骨干鏈路 四.路由分類 五.靜態路由 六.靜態路由拓展配置 一.負載均衡 二.環回接口 三.手工匯總 四.路由黑洞 五.缺…

【分布式存儲】數據存儲和檢索~B+樹

為什么數據存儲結構重要 在存儲系統中,其實不管數據是什么樣的,歸根結底其實都還是取決于數據的底層存儲結構,而主要常見的就是數據庫索引結構,B樹、Redis中跳表、以及LSM、搜索引擎中的倒排索引。本質都是如何利用不用的數據結構…

軟件設計師(七)面向對象技術

面向對象: Object-Oriented, 是一種以客觀世界中的對象為中心的開發方法。 面向對象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模語言UML。 面向對象方法包括面向對象分析、面向對象設計和面向對象實現。 一、面向對象基礎 1、面向對象的基本…

7. 延遲隊列

延遲隊列 7.1. 延遲隊列概念 延時隊列,隊列內部是有序的,最重要的特性就體現在它的延時屬性上,延時隊列中的元素是希望 在指定時間到了以后或之前取出和處理,簡單來說,延時隊列就是用來存放需要在指定時間被處理的 元素的隊列。 7…

【Spring Boot】構建RESTful服務 — 使用Swagger生成Web API文檔

使用Swagger生成Web API文檔 高質量的API文檔在系統開發的過程中非常重要。本節介紹什么是Swagger,如何在Spring Boot項目中集成Swagger構建RESTful API文檔,以及為Swagger配置Token等通用參數。 1.什么是Swagger Swagger是一個規范和完整的框架&…

QT創建項目

可選擇CMake或qmake

SSL證書DV和OV的區別?

SSL證書是在互聯網通信中保護數據傳輸安全的一種加密工具。它能夠確保客戶端和服務器之間的通信得以加密,防止第三方竊聽或篡改信息。在選擇SSL證書時,常見的有DV證書和OV證書,它們在驗證標準和信任級別上有所不同。那么SSL證書DV和OV的有哪些…