代碼隨想錄-刷題第二十二天

235.二叉搜索樹的最近公共祖先

題目鏈接:235. 二叉搜索樹的最近公共祖先

思路:根據二叉搜索樹的特性,只需要判斷當前節點是否在[p,q]范圍內就可以,如果在這個范圍里,說明當前節點就是其最近公共祖先。

class Solution {// 根據二叉搜索樹特性,只要當前節點在[p,q]范圍內就說明是其最近祖先public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null) return null;if (p.val > q.val) {// 保證 p.val <= q.val,便于后續情況討論return lowestCommonAncestor(root, q, p);}if (root.val >= p.val && root.val <= q.val) {// p <= root <= q// 即 p 和 q 分別在 root 的左右子樹,那么 root 就是 LCAreturn root;}if (root.val > q.val) {// p 和 q 都在 root 的左子樹,那么 LCA 在左子樹return lowestCommonAncestor(root.left, p, q);} else {// p 和 q 都在 root 的右子樹,那么 LCA 在右子樹return lowestCommonAncestor(root.right, p, q);}}
}

精簡版:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root.val > p.val && root.val > q.val) return lowestCommonAncestor(root.left, p, q);if (root.val < p.val && root.val < q.val) return lowestCommonAncestor(root.right, p, q);return root;}
}

701.二叉搜索樹中的插入操作

題目鏈接:701. 二叉搜索樹中的插入操作

思路:如果要遞歸地插入或者刪除二叉樹節點,遞歸函數一定要有返回值,而且返回值需要被正確的接收。

插入的過程可以分兩部分:

1、尋找正確的插入位置,類似 700. 二叉搜索樹中的搜索。

2、把元素插進去,這就要把新節點以返回值的方式接到父節點上。

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {// 找到空位置插入新節點if (root == null) return new TreeNode(val);// if (root.val == val)//     BST 中一般不會插入已存在元素if (root.val < val)root.right = insertIntoBST(root.right, val);if (root.val > val)root.left = insertIntoBST(root.left, val);return root;}
}

450.刪除二叉搜索樹中的節點

題目鏈接:450. 刪除二叉搜索樹中的節點

思路:刪除比插入和搜索都要復雜一些,分三種情況:

情況 1A 恰好是末端節點,兩個子節點都為空,那么它可以當場刪除;

情況 2A 只有一個非空子節點,那么它要讓這個孩子接替自己的位置;

情況 3A 有兩個子節點,為了不破壞BST的性質,A 必須找到左子樹中最大的那個節點或者右子樹中最小的那個節點來接替自己,以下的解法是用右子樹中最小節點來替換。

class Solution {public TreeNode deleteNode(TreeNode root, int key) {if (root == null) return null;if (root.val == key) {// 這兩個 if 把情況 1 和 2 都正確處理了// 左子樹為空,直接返回右子樹// 右子樹為空,直接返回左子樹// 這里若左右子樹均為空,也是返回空if (root.left == null) return root.right;if (root.right == null) return root.left;// 處理情況 3 ,左右子樹都不為空// 獲得右子樹最小的節點TreeNode minNode = getMin(root.right);// 刪除右子樹最小的節點root.right = deleteNode(root.right, minNode.val);// 用右子樹最小的節點替換 root 節點minNode.left = root.left;minNode.right = root.right;root = minNode;} else if (root.val > key) {root.left = deleteNode(root.left, key);} else if (root.val < key) {root.right = deleteNode(root.right, key);}return root;}TreeNode getMin(TreeNode node) {// BST 最左邊的就是最小的while (node.left != null) node = node.left;return node;}
}

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

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

相關文章

C語言進階之路之結構體、枚舉關卡篇

目錄 一、學習目標 二、組合數據類型-結構體 結構體基本概念 結構體的聲明&#xff1a; 小怪實戰 結構體初始化 指定成員初始化的好處&#xff1a; 結構體成員引用 結構體指針與數組 關卡BOOS 三、結構體的尺寸 CPU字長 地址對齊 結構體的M值 可移植性 四、聯合體…

Java 使用冒號的七種方式

在 Java 中&#xff0c;冒號字符&#xff08;:&#xff09;用于不同的上下文&#xff0c;并根據上下文的不同而具有不同的含義。 以下是 Java 中冒號的一些常用用法&#xff1a; 1、三元運算符 冒號在三元運算符 (? :) 中用作條件、條件為真時要執行的表達式和條件為假時要執…

計算機視覺 基于Open3D了解用于網格和點云鄰域分析的KD樹和八叉樹

一、簡述 距離計算和鄰域分析是理解網格和點云的形狀、結構和特征的重要工具。我們這里要基于一些3D庫來提取基于距離的信息并將其可視化。 與深度圖或體素相比,點云和網格表示 3D 空間中的非結構化數據。點由它們的 (X, Y, Z) 坐標表示,在 3D 空間中可能彼此靠近的兩…

Python數據科學視頻講解:數據清洗、特征工程和數據可視化的注意事項

1.6 數據清洗、特征工程和數據可視化的注意事項 視頻為《Python數據科學應用從入門到精通》張甜 楊維忠 清華大學出版社一書的隨書贈送視頻講解1.6節內容。本書已正式出版上市&#xff0c;當當、京東、淘寶等平臺熱銷中&#xff0c;搜索書名即可。內容涵蓋數據科學應用的全流程…

深入理解HTTP協議中的GET、POST、DELETE和PUT方法

在Web開發中&#xff0c;我們經常需要與服務器進行交互&#xff0c;以獲取或發送數據。為了實現這一目標&#xff0c;我們使用HTTP協議。HTTP協議是一種無狀態的、應用層的協議&#xff0c;它定義了客戶端和服務器之間的通信方式。在HTTP協議中&#xff0c;有四種常用的請求方法…

MN316 OpenCPU丨HTTP使用介紹

HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;即超文本傳輸協議&#xff0c;是一個簡單的請求-響應協議&#xff0c;通常運行在TCP之上&#xff0c;它指定了客戶端可能發送給服務器消息類型以及得到什么類型響應。HTTPS&#xff08;Hyper Text Transfer Protoc…

uniapp使用v-html調用接口,富文本圖片 視頻自適應大小

前端獲取到后臺數據 不做處理 就會出現下面問題 圖片 視頻超出視圖顯示不全 處理 //info 是富文本 <view v-ifinfo v-htmlreplaceWhite(info)></view>調用下面方法 replaceWhite(html) { // 處理富文本默認圖片&#xff0c;視頻大小let newContent html.replace…

Nestjs聯合Typeorm操作Mysql數據庫

創建項目 // 安裝腳手架(只需要安裝一次,因為這個是全局的) npm i -g nestjs/cli // 創建項目 nest new project-name // (該過程有個選擇包管理工具的,我選的yarn)啟動項目 yarn run start:dev // 可以在瀏覽器訪問localhost:3000 輸出helloWorld安裝typeorm,mysql2和nestj…

藍橋小白賽1

&#x1f469;?&#x1f3eb; 地址 1. 蘑菇炸彈 &#x1f469;?&#x1f3eb; 蘑菇炸彈 &#x1f389; AC code import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int[] a …

d8week17

Week7 lec17 TVD去asscess model &#xff08;本質 距離加權平均&#xff09;text 11.2A New Statistic: The Distance between Two Distributions text-11.11.1 數據拿到手&#xff0c;套路操作 -- 看hist分布2 total variation distance lec18lec19 lec17 TVD去asscess model…

使用NCNN在華為M5部署Yolov5

使用NCNN在華為M5平板部署Yolov5 一、NCNN二、下載解壓NCNN三、下載ncnn-android-yolov5工程四、下載Android Studio[前提已經配置了jdk版本]1、安裝NDK、Cmske&#xff0c;這個必須要安裝&#xff0c;2、安裝Android 五、構建工程六、修改源碼七、重新ysnc project八、安裝APP…

MySQL深入——8

Order by語句是如何工作的&#xff1f; 首先我們來創建一個表 CREATE TABLE t (id int(11) NOT NULL,city varchar(16) NOT NULL,name varchar(16) NOT NULL,age int(11) NOT NULL,addr varchar(128) DEFAULT NULL,PRIMARY KEY (id),KEY city (city) ) ENGINEInnoDB; 全字段…

SQL命令---刪除數據表

介紹 使用sql語句實現刪除數據表。 命令 drop table 表名;

Python實戰演練之python實現神經網絡模型算法

python實現神經網絡模型算法 今天&#xff0c;厾羅和大家分享用Python實現神經網絡模型算法&#xff0c;僅用于技術學習交流。 實現技巧 1.導入依賴庫 主要是安裝相關的依賴庫。本文實現的環境為&#xff1a;python 3.7。 from __future__ import division import math …

C語言聯合體

聯合體 聯合體聯合體基本概念聯合體特點聯合體內存結構圖 聯合體 聯合體基本概念 聯合體概念&#xff1a; 結構體&#xff08;struct&#xff09;是一種結構體類型或者復雜類型&#xff0c;它可以包含多個類型不同的成員另外一種和結構體非常類似的類型&#xff0c;叫做聯合…

GPT-4 變懶了?官方回復

你是否注意到&#xff0c;最近使用 ChatGPT 的時候&#xff0c;當你向它提出一些問題&#xff0c;卻得到的回應似乎變得簡短而敷衍了&#xff1f;對于這一現象&#xff0c;ChatGPT 官方給出了回應。 譯文&#xff1a;我們聽到了你們所有關于 GPT4 變得更懶的反饋&#xff01;我…

在HTML中插入音頻和視頻(詳解)

Hi i,m JinXiang ? 前言 ? 本篇文章主要介紹在HTML中插入音頻和視頻以及部分理論知識 &#x1f349;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f4dd;私信必回喲&#x1f601; &#x1f349;博主收將持續更新學習記錄獲&#xff0c;友友們有任何問題可以在評論區留言 …

外匯交易中的MT4軟件優勢:解析軟件對交易的影響!

近年來&#xff0c;隨著金融科技的不斷發展&#xff0c;MT4軟件作為外匯交易領域的領先平臺&#xff0c;備受交易者青睞。本文將探討MT4軟件在外匯交易中的優勢以及對交易的影響&#xff0c;幫助讀者深入了解這一交易利器。 ### 1. MT4軟件概述 MetaTrader 4(簡稱MT4)是一款由M…

深度學習 時間序列回歸學習筆記

目錄 常用的深度學習時間序列回歸模型: ARIMA模型 ETS模型 效果評估

低多邊形3D建模動畫風格紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…