二叉樹搜索樹與雙向鏈表

一:題目

二:思路

把二叉搜索樹的值升序的打印出來,中序打印即可,但是此題不僅僅是有序的打印出二叉搜索樹的值,而是要將其的結構也改變了,也就是說要改變節點間的指向,讓其成為一個雙向鏈表

我們在中序遍歷的時候,會依次得到4 6 8 10 12 14 16,那我們在依次得到這些節點值的時候,將彼此之間進行鏈接即可

如圖所示:

三:代碼?

class Solution {//中序遍歷 進行鏈接void InOrderConvert(TreeNode* cur,TreeNode*& prev){//cur為空return即可if(cur==nullptr)return;//左子樹遞歸InOrderConvert(cur->left, prev);//對cur和prev的鏈接if(prev!=nullptr)cur->left = prev;if(prev!=nullptr)prev->right = cur;//鏈接完成 cur賦給了prev//cur繼續中序遍歷得到下一個中序節點prev = cur;//右子樹遞歸InOrderConvert(cur->right, prev);}
public:TreeNode* Convert(TreeNode* pRootOfTree) {//二叉搜索樹就是空樹 則返回nullptrif(pRootOfTree==nullptr)return nullptr;//為調用InOrderConvert函數創建參數TreeNode* prev = nullptr;//第一個參數就是根節點 第二個參數是為nullptr的prevInOrderConvert(pRootOfTree, prev);//走到這里 代表雙向鏈表已經完成了TreeNode* head = pRootOfTree;//所以我們要找到雙向鏈表的第一個元素//也就是二叉搜索樹的最小值//即一直遍歷左樹 最后一個節點 即為最小節點while(head->left){head = head->left;}//返回return head;}
};

解釋:

InOrderConvert的參數:

cur:當前正在處理的節點

prev:指向前一個處理過的節點的指針(引用傳遞,以便在遞歸調用間保持更新)

步驟:

遞歸處理左子樹

InOrderConvert(cur->left, prev);

處理當前節點:

將當前節點的左指針(left)指向prev,將prev的右指針(right)指向當前節點,更新prev為當前節點

        if(prev!=nullptr)cur->left = prev;if(prev!=nullptr)prev->right = cur;prev = cur;

遞歸處理右子樹

InOrderConvert(cur->right, prev);

解釋:中序遍歷就是左根右,我們想做什么都是在 根 的這個方框里面做的,這道題是鏈接節點,若是按照下圖,則變成了遍歷打印,所以遞歸中序,前序,后序,都只是三個框的順序不同罷了,當然也不要忘記空節點的判斷,遞歸一定需要返回條件的!

這就變成了打印~?

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

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

相關文章

31天Python入門——第17天:初識面向對象

你好,我是安然無虞。 文章目錄 面向對象編程1. 什么是面向對象2. 類(class)3. 類的實例關于self 4. 對象的初始化5. __str__6. 類之間的關系繼承關系組合關系 7. 補充練習 面向對象編程 1. 什么是面向對象 面向對象編程是一種編程思想,它將現實世界的概念和關系映…

Spring Boot中常用內嵌數據庫(H2、HSQLDB、Derby)的對比,包含配置示例和關鍵差異總結

以下是Spring Boot中常用內嵌數據庫的對比,包含配置示例和關鍵差異總結: 一、主流內嵌數據庫對比 1. H2 數據庫 特點: 支持內存模式(速度快)和文件模式(數據持久化)。支持SQL方言&#xff08…

Apache Hive和Snowflake的`CREATE VIEW`語法和功能特性整理的對比表

寫一個Apache Hive中CREATE VIEW語句轉換為對應Snowflake中CREATE VIEW語句的程序,現在需要一個根據功能的相似性對應的Apache HiveQL和Snowflake SQL的CREATE VIEW語句的表。 以下是基于Apache Hive的CREATE VIEW語法規則構造的所有可能合法語句實例及其功能說明&…

個人博客網站從搭建到上線教程

步驟1:設計個人網站 設計個人博客網站的風格樣式,可以在各個模板網站上多瀏覽瀏覽,以便有更多設計網站風格樣式的經驗。 設計個人博客網站的內容,你希望你的網站包含哪些內容如你的個人基本信息介紹、你想分享的項目、你想分享的技術文檔等等。 步驟2:選擇開發技術棧 因…

PHP回調后門

1.系統命令執行 直接windows或liunx命令 各個程序 相應的函數 來實現 system exec shell_Exec passshru 2.執行代碼 eval assert php代碼 系統 <?php eval($_POST) <?php assert($_POST) 簡單的測試 回調后門函數call_user_func(1,2) 1是回調的函數 2是回調…

Raspberry 樹莓派 CM4模塊的底板設計注意事項

1&#xff0c; 樹莓派CM4底板設計 樹莓派CM4模塊集成了CPU&#xff0c; 存儲器&#xff0c;以太網&#xff0c; 無線模塊&#xff0c;電源等等&#xff0c; 大大降低了硬件設計的要求。對我們使用樹莓派提供了很好的便利性。 本人近期因為項目的需要設計了一款CM4的底板&#x…

Java后端開發(十八)-- 使用JAXB,將JavaBean轉換XML文本

下面是測試時的運行環境: 1.jdk8 2.Maven,可能需要需要的依賴,如下: <dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><gr…

【一起來學kubernetes】30、k8s的java sdk怎么用

Kubernetes Java SDK 是開發者在 Java 應用中與 Kubernetes 集群交互的核心工具&#xff0c;支持資源管理、服務發現、配置操作等功能。 一、主流 Java SDK 對比與選擇 官方 client-java 庫 特點&#xff1a;由 Kubernetes 社區維護&#xff0c;API 與 Kubernetes 原生對象嚴格…

PHP開發者2025生存指南

PHP&#xff0c;這個曾經被戲稱為“世界上最好的語言”的腳本語言&#xff0c;依舊在網絡世界占據著重要的地位。然而&#xff0c;技術發展日新月異&#xff0c;面向2025年&#xff0c;PHP開發者要想保持競爭力甚至實現職業生涯的飛躍&#xff0c;需要不斷學習和提升自身技能。…

MySQL與Redis數據一致性保障方案詳解

前言 在現代分布式系統中&#xff0c;MySQL和Redis的結合使用非常普遍。MySQL作為關系型數據庫負責持久化存儲&#xff0c;而Redis則作為高性能緩存層提升系統的響應速度。然而&#xff0c;在這種架構下&#xff0c;如何保證MySQL與Redis之間的數據一致性是一個重要的挑戰。本…

MySQL響應慢是否由堵塞或死鎖引起?

目錄標題 **1. 檢查當前運行的查詢和進程****2. 查看死鎖日志****方法一&#xff1a;通過錯誤日志****方法二&#xff1a;通過InnoDB狀態** **3. 檢查鎖信息****查看表鎖****查看行鎖&#xff08;InnoDB&#xff09;** **4. 分析慢查詢****開啟慢查詢日志****分析慢查詢** **5.…

【計算機網絡】記錄一次校園網無法上網的解決方法

問題現象 環境&#xff1a;實訓室教室內時間&#xff1a;近期突然出現 &#xff08;推測是學校在施工&#xff0c;部分設備可能出現問題&#xff09;癥狀&#xff1a; 連接校園網 SWXY-WIFI 后&#xff1a; 連接速度極慢偶發無 IP 分配&#xff08;DHCP 失敗&#xff09;即使分…

JavaScript函數式編程思想

1. 相關面試題 1.1. 什么是純函數&#xff1f; 純函數是一種函數&#xff0c;其返回值僅由其輸入參數決定&#xff0c;不產生任何可觀察的副作用&#xff0c;如修改全局對象或外部狀態。 純函數具有以下特性&#xff1a; 1. 確定性&#xff1a;相同的輸入永遠得到相同的輸…

Elasticsearch安全與權限控制指南

在Elasticsearch維護中&#xff0c;安全管理是保障數據合規性和集群穩定性的關鍵。本文將詳細介紹用戶與角色管理、索引/字段級權限控制、HTTPS加密通信、審計日志與合規性檢查等核心安全實踐&#xff0c;希望可以幫助你構建更安全的Elasticsearch環境。 1 用戶與角色管理 1.1…

『VUE』快速入門配置環境使用tailwind css 記憶tailwind css常見規則 (詳細圖文注釋)

目錄 效果預覽快速入門環境配置配置 tailwind.config.js 設置文件添加 Tailwind 的基礎樣式引入樣式到項目檢查構建工具配置測試 Tailwind CSS 效果 使用插件tailwind.config.js的最終內容app.vue演示 為什么不需要記憶 Tailwind 的類名&#xff1f;1. 類名直觀2. 文檔全面3. 工…

StdioIterator

參考這種用法&#xff1a; int a[3]{1,2,3}; copy(a,a3,ostream_iterator<int>(cout," ")); 以及 ostream_iterator 類 | Microsoft Learn 中的函數簽名&#xff0c;可以編寫出 StdioIterator&#xff0c;同樣支持 copy 函數的調用。 #include <stdio.h&…

制作service列表并打印出來

制作service列表并打印出來 在Linux中&#xff0c;服務&#xff08;Service&#xff09;是指常駐在內存中的進程&#xff0c;這些進程通常監聽某個端口&#xff0c;等待其他程序的請求。服務也被稱為守護進程&#xff08;Daemon&#xff09;&#xff0c;它們提供了系統所需的各…

CKS認證 | Day3 K8s容器運行環境安全加固

一、最小特權原則&#xff08;POLP&#xff09; 1&#xff09;最小特權原則 (Principle of least privilege&#xff0c;POLP) &#xff1a; 是一種信息安全概念&#xff0c;即為用戶提供執行其工作職責所需的最 小權限等級或許可。 最小特權原則被廣泛認為是網絡安全的最佳實…

Linux wifi 驅動移植適配流程詳解

基礎內容概要 將tplink wn725n 無線網卡驅動移植到ubuntu將tplink wn725n 無線網卡驅動移植到Linux開發板&#xff08;交叉編譯&#xff09;將tplink wn725n 無線網卡驅動移植到Linux開發板&#xff0c;在開發板中編譯 為什么還要包涵交叉編譯&#xff1f; 目標設備是ARM架構…

Day14 動態規劃(3)

一.746. 使用最小花費爬樓梯 FS記憶化搜索優化: const int N 1010;class Solution { public:int mem[N];int dfs(vector<int>& cost, int x){if(mem[x]) return mem[x];int sum 0;if(x 0 || x 1) return 0;else{sum min(dfs(cost, x - 1) cost[x - 1], dfs(c…