代碼隨想錄打卡第二十一天

代碼隨想錄–二叉樹部分

day 21 二叉樹第八天


文章目錄

  • 代碼隨想錄--二叉樹部分
  • 一、力扣669--修建二叉搜索樹
  • 二、力扣108--將有序數組轉換為二叉搜索樹
  • 三、力扣538--把二叉搜索樹轉換為累加樹


一、力扣669–修建二叉搜索樹

代碼隨想錄題目鏈接:代碼隨想錄

給你二叉搜索樹的根節點 root ,同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹,使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中的元素的相對結構 (即,如果沒有被移除,原有的父代子代關系都應當保留)。 可以證明,存在 唯一的答案 。
所以結果應當返回修剪好的二叉搜索樹的新的根節點。注意,根節點可能會根據給定的邊界發生改變。

這里不能想的太復雜,要注意是二叉搜索樹,如果某個節點比low還小,那說明它左子樹可以整個刪了,反之亦然

那么向下搜索,如果遇到小于low的節點,就遞歸它的右子樹,大于high就左子樹

至于刪除節點,只需要在return的時候注意一下不是return root,而是return遞歸結果

只不過這樣沒法釋放內存,會有些浪費

代碼如下:

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(!root) return nullptr;if(root->val < low){TreeNode * right = trimBST(root->right, low, high);return right;}if(root->val > high){TreeNode * left = trimBST(root->left, low, high);return left;}root->left = trimBST(root->left, low, high);root->right = trimBST(root->right, low, high);return root;}   
};

二、力扣108–將有序數組轉換為二叉搜索樹

代碼隨想錄題目鏈接:代碼隨想錄

給你一個整數數組 nums ,其中元素已經按 升序 排列,請你將其轉換為一棵 平衡 二叉搜索樹。

核心思路就是遞歸構建,并且每次都對nums進行分割,分成左子樹數組和右子樹數組,和構建最大二叉樹一個想法

代碼如下:

class Solution {
public:TreeNode* traversal(vector<int>& nums, int left, int right){if (left > right) return nullptr;int mid = left + (right - left) / 2;TreeNode * curr = new TreeNode(nums[mid]);curr->left = traversal(nums, left, mid - 1);curr->right = traversal(nums, mid + 1, right);return curr;}TreeNode* sortedArrayToBST(vector<int>& nums) {TreeNode * root = traversal(nums, 0, nums.size() - 1);return root;}
};

三、力扣538–把二叉搜索樹轉換為累加樹

代碼隨想錄題目鏈接:代碼隨想錄

給出二叉 搜索 樹的根節點,該樹的節點值各不相同,請你將其轉換為累加樹(Greater Sum Tree),使每個節點 node 的新值等于原樹中大于或等于 node.val 的值之和。
提醒一下,二叉搜索樹滿足下列約束條件:
節點的左子樹僅包含鍵 小于 節點鍵的節點。
節點的右子樹僅包含鍵 大于 節點鍵的節點。
左右子樹也必須是二叉搜索樹。

簡單講就是把每個大于當前節點的值都加起來,和當前節點相加作為該節點的新值

那么只要從右葉子節點向左邊遍歷,每遍歷一次就對sum累加一次,加到最后就結束了

這里sum定義成全局變量,記錄遍歷以來每個node的值之和

也就是反過來的中序遞歸

代碼如下:

class Solution {
public:int sum = 0;void traversal(TreeNode * curr){if(!curr) return;traversal(curr->right);curr->val += sum;sum = curr->val;traversal(curr->left);}TreeNode* convertBST(TreeNode* root) {traversal(root);return root;}
};

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

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

相關文章

常見條件控制算法流程圖

內容講解&#xff1a;流程控制[if…else…(if…elif…else…),while,for] 常見條件控制算法流程圖高清圖

新手教學系列——高效管理MongoDB數據:批量插入與更新的實戰技巧

前言 在日常開發中,MongoDB作為一種靈活高效的NoSQL數據庫,深受開發者喜愛。然而,如何高效地進行數據的批量插入和更新,卻常常讓人頭疼。今天,我們將一起探討如何使用MongoDB的bulk_write方法,簡化我們的數據管理流程,讓代碼更加簡潔高效。 常規做法:find、insertone…

Unity 之 抖音小游戲集成排行榜功能詳解

Unity 之 抖音小游戲集成排行榜功能詳解 一,前言1.1 為游戲設計利于傳播的元素?2.2 多人競技、社交傳播?二,集成說明2.1 功能介紹2.2 完整代碼2.3 效果展示三,發現的問題和迭代計劃一,前言 對于 Unity 開發者而言,在開發抖音小游戲時集成排行榜功能是提升游戲社交性和玩…

Java實戰中處理高并發的策略

引言 隨著互聯網的快速發展&#xff0c;高并發成為了許多應用必須面對的挑戰。Java作為一門廣泛應用于企業級開發的語言&#xff0c;提供了豐富的工具和技術來應對高并發問題。本文將詳細探討Java中處理高并發的幾種常見策略和技術。 1. 并發編程基礎 1.1 線程與線程池 Jav…

【TVM 教程】使用 TVM 部署框架預量化模型

本文介紹如何將深度學習框架量化的模型加載到 TVM。預量化模型的導入是 TVM 中支持的量化之一。有關 TVM 中量化的更多信息&#xff0c;參閱 此處。 這里演示了如何加載和運行由 PyTorch、MXNet 和 TFLite 量化的模型。加載后&#xff0c;可以在任何 TVM 支持的硬件上運行編譯…

【Linux】常見指令收官權限理解

tar指令 上一篇博客已經介紹了zip/unzip指令&#xff0c;接下來我們來看一下另一個關于壓縮和解壓的指令&#xff1a;tar指令tar指令&#xff1a;打包/解包&#xff0c;不打開它&#xff0c;直接看內容 關于tar的指令有太多了&#xff1a; tar [-cxtzjvf] 文件與目錄 ...…

C++運行時類型識別

目錄 C運行時類型識別A.What&#xff08;什么是運行時類型識別RTTI&#xff09;B.Why&#xff08;為什么需要RTTI&#xff09;C.dynamic_cast運算符Why&#xff08;dynamic_cast運算符的作用&#xff09;How&#xff08;如何使用dynamic_cast運算符&#xff09; D.typeid運算符…

【Scrapy】 Scrapy 爬蟲框架

準我快樂地重飾演某段美麗故事主人 飾演你舊年共尋夢的戀人 再去做沒流著情淚的伊人 假裝再有從前演過的戲份 重飾演某段美麗故事主人 飾演你舊年共尋夢的戀人 你縱是未明白仍夜深一人 穿起你那無言毛衣當跟你接近 &#x1f3b5; 陳慧嫻《傻女》 Scrapy 是…

各地戶外分散視頻監控點位,如何實現遠程集中實時監看?

公司業務涉及視頻監控項目承包搭建&#xff0c;此前某個項目需求是為某林業公司提供視頻監控解決方案&#xff0c;需要實現各地視頻攝像頭的集中實時監看&#xff0c;以防止國家儲備林的盜砍、盜伐行為。 公司原計劃采用運營商專線連接各個視頻監控點位&#xff0c;實現遠程視…

跟著李沐學AI:線性回歸

引入 買房出價需要對房價進行預測。 假設1&#xff1a;影響房價的關鍵因素是臥室個數、衛生間個數和居住面積&#xff0c;記為x1、x2、x3。 假設2&#xff1a;成交價是關鍵因素的加權和 。權重和偏差的實際值在后面決定。 拓展至一般線性模型&#xff1a; 給定n維輸入&…

MySQL 9.0 正式發行Innovation創新版已支持向量

從 MySQL 8.1 開始&#xff0c;官方啟用了新的版本模型&#xff1a;MySQL 創新版 (Innovation) 和長期支持版 (LTS)。 根據介紹&#xff0c;兩者的質量都已達到可用于生產環境級別。區別在于&#xff1a; 如果希望嘗試最新的功能和改進&#xff0c;并喜歡與最新技術保持同步&am…

怎樣在 C 語言中實現棧?

&#x1f345;關注博主&#x1f397;? 帶你暢游技術世界&#xff0c;不錯過每一次成長機會&#xff01; &#x1f4d9;C 語言百萬年薪修煉課程 通俗易懂&#xff0c;深入淺出&#xff0c;匠心打磨&#xff0c;死磕細節&#xff0c;6年迭代&#xff0c;看過的人都說好。 文章目…

動手學深度學習(Pytorch版)代碼實踐 -循環神經網絡-55循環神經網絡的從零開始實現和簡潔實現

55循環神經網絡的實現 1.從零開始實現 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l import matplotlib.pyplot as plt import liliPytorch as lp# 讀取H.G.Wells的時光機器數據集 batch_size, num_ste…

開發個人Ollama-Chat--7 服務部署

開發個人Ollama-Chat–7 服務部署 服務部署 go-ChatGPT項目涉及的中間件服務較多&#xff0c;以下部署文件目錄&#xff1a; |-- chat-api | |-- etc | | -- config.yaml | -- logs |-- chat-rpc | |-- etc | | -- config.yaml | -- logs |-- docker-compos…

ElasticSearch第一天

學習目標&#xff1a; 能夠理解ElasticSearch的作用能夠安裝ElasticSearch服務能夠理解ElasticSearch的相關概念能夠使用Postman發送Restful請求操作ElasticSearch能夠理解分詞器的作用能夠使用ElasticSearch集成IK分詞器能夠完成es集群搭建 第一章 ElasticSearch簡介 1.1 什么…

windows 中的 Nsight Systems 通過ssh 鏈接分析 Linux 中的cuda程序性能

1&#xff0c;Linux 環境 安裝 ssh-server $ sudo apt install openssh-server 安裝較新版本的 cuda sdk 下載cuda-samples github repo 編輯修改 ssh 配置&#xff1a; $ sudo vim /etc/ssh/sshd_config 刪除相關注釋&#xff0c;修改后如下&#xff1a; Port 22 Addres…

只會vue的前端開發工程師是不是不能活了?最近被一個flutter叼了

**Vue與Flutter&#xff1a;前端開發的新篇章** 在前端開發的世界里&#xff0c;Vue.js和Flutter無疑是兩顆璀璨的明星。Vue以其輕量級、易上手的特點吸引了大量前端開發者的青睞&#xff0c;而Flutter則以其跨平臺、高性能的優勢迅速崛起。那么&#xff0c;對于只會Vue的前端…

【深度學習基礎】環境搭建 linux系統下安裝pytorch

目錄 一、anaconda 安裝二、創建pytorch1. 創建pytorch環境&#xff1a;2. 激活環境3. 下載安裝pytorch包4. 檢查是否安裝成功 一、anaconda 安裝 具體的安裝說明可以參考我的另外一篇文章【環境搭建】Linux報錯bash: conda: command not found… 二、創建pytorch 1. 創建py…

OceanBase:引領下一代分布式數據庫技術的前沿

OceanBase的基本概念 定義和特點 OceanBase是一款由螞蟻金服開發的分布式關系數據庫系統&#xff0c;旨在提供高性能、高可用性和強一致性的數據庫服務。它結合了關系數據庫和分布式系統的優勢&#xff0c;適用于大規模數據處理和高并發業務場景。其核心特點包括&#xff1a; …

【考研數學】25張宇強化36講測評及強化階段注意事項

張宇新版36講創新真的很大&#x1f979; 引入了很多張宇老師認為對大家解題幫助很大的技巧和知識點&#xff0c;但是也有人認為是多余的。 張宇老師新版36講第一講就講了整整8個小時&#xff01;&#x1f62d; 大家想想&#xff0c;自己有那個時間去吃透36講嗎&#xff1f;如果…