【算法訓練營Day18】二叉樹part8

文章目錄

  • 修剪二叉搜索樹
  • 將有序數組轉換為二叉搜索樹
  • 把二叉搜索樹轉換為累加樹

修剪二叉搜索樹

題目鏈接:669. 修剪二叉搜索樹

解題邏輯:

因為在刪除的同時要保證相對結構,所以我們不能沿用上一篇文章中的刪除邏輯,新的刪除邏輯為:

  • 如果是葉子節點且不在范圍內,直接刪除
  • 如果該節點值小于最小值,則返回該節點的右子樹(因為右子樹大于最小值,此時右子樹中不符合條件的值已經被刪除了)
  • 如果該節點值大于最大值,則返回該節點的左子樹(因為左子樹小于最大值,此時左子樹中不符合條件的值已經被刪除了)

代碼如下:

class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if(root == null) return null;TreeNode left = trimBST(root.left,low,high);TreeNode right = trimBST(root.right,low,high);if(root.val < low || root.val > high) {if(left == null && right == null) return null;else if(root.val < low) return right;else if(root.val > high) return left;}root.left = left;root.right = right;return root;}
}

將有序數組轉換為二叉搜索樹

題目鏈接:108. 將有序數組轉換為二叉搜索樹

本題是根據一個有序數組創建一個平衡的二叉搜索樹,核心思想就是:將數組從nums.length / 2開始切分,nums.length / 2索引對應的數值作為當前節點的值,左邊的為左子樹的節點值、右邊為右子樹的節點值。這樣遞歸切分構造,最后得到的一定是一個平衡的二叉搜索樹。

代碼如下:

class Solution {public TreeNode sortedArrayToBST(int[] nums) {if(nums.length == 0) return null;int devide = nums.length / 2;TreeNode left = sortedArrayToBST(Arrays.copyOfRange(nums, 0, devide));TreeNode right;if(devide + 1 >= nums.length) right = sortedArrayToBST(new int[0]);else right = sortedArrayToBST(Arrays.copyOfRange(nums, devide + 1, nums.length));TreeNode node = new TreeNode(nums[devide]);node.left = left;node.right = right;return node;}
}

把二叉搜索樹轉換為累加樹

題目鏈接:538. 把二叉搜索樹轉換為累加樹

解題邏輯:

我們直接使用中序遍歷是從小到大遍歷,此時數值不好做累加(因為后面的值我們都不知道)。所以我們可以將整個二叉搜索樹進行翻轉,然后再使用中序遍歷修改節點,此時是從大到小遍歷,累加值是已知的,所以節點的值更好累加。構造完之后,再翻轉一次還原即可。

代碼如下:

class Solution {int num = 0;public TreeNode convertBST(TreeNode root) {reverseBST(root);changeBST(root);reverseBST(root);return root;}public void changeBST(TreeNode root){if(root == null) return;changeBST(root.left);int history = root.val;root.val += num;num += history;changeBST(root.right);}public void reverseBST(TreeNode root){if(root == null) return;reverseBST(root.left);reverseBST(root.right);TreeNode temp = root.left;root.left = root.right;root.right = temp;}
}

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

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

相關文章

【C++篇】“內存泄露”的寶藏手段:智能指針

目錄 智能指針的使用場景分析 RAII和智能指針的設計思路 C標準庫智能指針的使用 auto_ptr的使用&#xff1a; unique_ptr的使用&#xff1a; shared_ptr的使用&#xff1a; 模擬shared_ptr: 定制刪除器&#xff1a; shared_ptr的循環引用 weak_ptr 智能指針的使用場景…

【密碼學】4. 分組密碼

目錄分組密碼分組密碼概述Feistel 密碼結構數據加密標準&#xff08;DES&#xff09;差分密碼分析與線性密碼分析分組密碼的運行模式國際數據加密算法&#xff08;IDEA&#xff09;高級加密標準&#xff08;AES&#xff0c;Rijndael&#xff09;中國商用密碼 SM4祖沖之密碼&…

單片機(STM32-WIFI模塊)

一、WIFI模塊介紹 1. ESP12-F模組介紹 1.1 簡介 ESP12-F模組&#xff08;安信可&#xff08;Ai-Thinker&#xff09;ESP8266系列模組&#xff09;是一款基于樂鑫&#xff08;Espressif&#xff09;公司ESP8266芯片的Wi-Fi無線通信模塊&#xff0c;廣泛應用于物聯網&#xff0…

PyTorch 數據類型和使用

關于PyTorch的數據類型和使用的學習筆記 系統介紹了PyTorch的核心數據類型Tensor及其應用。Tensor作為多維矩陣數據容器&#xff0c;支持0-4維數據結構&#xff08;標量到批量圖像&#xff09;&#xff0c;并提供了多種數值類型&#xff08;float32/int64等&#xff09;。通過…

[python刷題模板] LogTrick

[python刷題模板] LogTrick 一、 算法&數據結構1. 描述2. 復雜度分析3. 常見應用4. 常用優化二、 模板代碼1. 特定或值的最短子數組2. 找特定值3. 找位置j的最后一次被誰更新4. 問某個或和的數量三、其他四、更多例題五、參考鏈接一、 算法&數據結構 1. 描述 LogTric…

Vim與VS Code

Vim is a clone, with additions, of Bill Joys vi text editor program for Unix. It was written by Bram Moolenaar based on source for a port of the Stevie editor to the Amiga and first released publicly in 1991.其實這個本身不是 IDE &#xff08;只有在加入和配置…

[2025CVPR-圖象分類方向]CATANet:用于輕量級圖像超分辨率的高效內容感知標記聚合

?1. 研究背景與動機? ?問題?&#xff1a;Transformer在圖像超分辨率&#xff08;SR&#xff09;中計算復雜度隨空間分辨率呈二次增長&#xff0c;現有方法&#xff08;如局部窗口、軸向條紋&#xff09;因內容無關性無法有效捕獲長距離依賴。?現有局限?&#xff1a; SPI…

課題學習筆記3——SBERT

1 引言在構建基于知識庫的問答系統時&#xff0c;"語義匹配" 是核心難題 —— 如何讓系統準確識別 "表述不同但含義相同" 的問題&#xff1f;比如用戶問 "對親人的期待是不是欲&#xff1f;"&#xff0c;系統能匹配到知識庫中 "追名逐利是欲…

在Word和WPS文字中把全角數字全部改為半角

大部分情況下我們在Word或WPS文字中使用的數字或標點符號都是半角&#xff0c;但是有時不小心按錯了快捷鍵或者點到了輸入法的全角半角切換圖標&#xff0c;就輸入了全角符號和數字。不用擔心&#xff0c;使用它們自帶的全角、半角轉換功能即可快速全部轉換回來。一、為什么會輸…

數據結構的基本知識

一、集合框架1、什么是集合框架Java集合框架(Java Collection Framework),又被稱為容器(container),是定義在java.util包下的一組接口(interfaces)和其實現類(classes).主要表現為把多個元素(element)放在一個單元中,用于對這些元素進行快速、便捷的存儲&#xff08;store&…

WebStack-Hugo | 一個靜態響應式導航主題

WebStack-Hugo | 一個靜態響應式導航主題 #10 shenweiyan announced in 1.3-折騰 WebStack-Hugo | 一個靜態響應式導航主題#10 ?編輯shenweiyan on Oct 23, 2023 6 comments 7 replies Return to top shenweiyan on Oct 23, 2023 Maintainer Via&#xff1a;我給自己…

01 基于sklearn的機械學習-機械學習的分類、sklearn的安裝、sklearn數據集、數據集的劃分、特征工程中特征提取與無量綱化

文章目錄機械學習機械學習分類1. 監督學習2. 半監督學習3. 無監督學習4. 強化學習機械學習的項目開發步驟scikit-learn1 scikit-learn安裝2 sklearn數據集1. sklearn 玩具數據集鳶尾花數據集糖尿病數據集葡萄酒數據集2. sklearn現實世界數據集20 新聞組數據集3. 數據集的劃分特…

攜全雙工語音通話大模型亮相WAIC,Soul重塑人機互動新范式

近日&#xff0c;WAIC 2025在上海隆重開幕。作為全球人工智能領域的頂級盛會&#xff0c;本屆WAIC展覽聚焦底層能力的演進與具體垂類場景的融合落地。堅持“模應一體”方向、立足“AI社交”的具體場景&#xff0c;Soul App此次攜最新升級的自研端到端全雙工語音通話大模型亮相&…

第2章 cmd命令基礎:常用基礎命令(1)

Hi~ 我是李小咖&#xff0c;主要從事網絡安全技術開發和研究。 本文取自《李小咖網安技術庫》&#xff0c;歡迎一起交流學習&#x1fae1;&#xff1a;https://imbyter.com 本節介紹的命令有目錄操作&#xff08;cd&#xff09;、清屏操作&#xff08;cls&#xff09;、設置顏色…

Java 10 新特性解析

Java 10 新特性解析 文章目錄Java 10 新特性解析1. 引言2. 本地變量類型推斷&#xff08;JEP 286&#xff09;2.1. 概述2.2. 使用場景2.3. 限制2.4. 與之前版本的對比2.5. 風格指南2.6. 示例代碼2.7. 優點與注意事項3. 應用程序類數據共享&#xff08;JEP 310&#xff09;3.1. …

【WRF工具】服務器中安裝編譯GrADS

目錄 安裝編譯 GrADS 所需的依賴庫 conda下載庫包 安裝編譯 GrADS 編譯前檢查依賴可用性 安裝編譯 GrADS 參考 安裝編譯 GrADS 所需的依賴庫 以統一方式在 $HOME/WRFDA_LIBS/grads_deps 下安裝所有依賴: # 選擇一個目錄用于安裝所有依賴庫 export DIR=$HOME/WRFDA_LIBS庫包1…

數據結構之隊列(C語言)

1.隊列的定義&#xff1a; 隊列&#xff08;Queue&#xff09;是一種基礎且重要的線性數據結構&#xff0c;遵循先進先出&#xff08;FIFO&#xff09;?? 原則&#xff0c;即最早入隊的元素最先出隊&#xff0c;與棧不同的是出隊列的順序是固定的。隊列具有以下特點&#xff…

C#開發基礎之深入理解“集合遍歷時不可修改”的異常背后的設計

前言 歡迎關注【dotnet研習社】&#xff0c;今天我們聊聊一個基礎問題“集合已修改&#xff1a;可能無法執行枚舉操作”背后的設計。 在日常 C# 開發中&#xff0c;我們常常會操作集合&#xff08;如 List<T>、Dictionary<K,V> 等&#xff09;。一個新手開發者極…

【工具】圖床完全指南:從選擇到搭建的全方位解決方案

前言 在數字化內容創作的時代&#xff0c;圖片已經成為博客、文檔、社交媒體等平臺不可或缺的元素。然而&#xff0c;如何高效、穩定地存儲和分發圖片資源&#xff0c;一直是內容創作者面臨的重要問題。圖床&#xff08;Image Hosting&#xff09;作為專門的圖片存儲和分發服務…

深度學習篇---PaddleDetection模型選擇

PaddleDetection 是百度飛槳推出的目標檢測開發套件&#xff0c;提供了豐富的模型庫和工具鏈&#xff0c;覆蓋從輕量級移動端到高性能服務器的全場景需求。以下是核心模型分類、適用場景及大小選擇建議&#xff08;通俗易懂版&#xff09;&#xff1a;一、主流模型分類及適用場…