代碼隨想錄第14天| 翻轉、對稱與深度

226.翻轉二叉樹 (優先掌握遞歸)

題目鏈接/文章講解/視頻講解:翻轉二叉樹

交換的是指針,而不是數值,如果用數值做交換,需要交換的節點下面無法很好的操作。

使用遞歸來實現,但要提前清除是什么順序的遞歸(前中后)

具體操作是——每一個節點的左右孩子都翻轉一下指針

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void f(TreeNode* root){if(root==NULL) return;swap(root->left,root->right);if(root->left!=NULL) f(root->left);//不寫返回if(root->right!=NULL) f(root->right);}TreeNode* invertTree(TreeNode* root) {//遞歸//參數與返回值(二叉樹)、遞歸結束條件、每一層的執行邏輯f(root);return root;}
};

101. 對稱二叉樹 (優先掌握遞歸)

題目鏈接/文章講解/視頻講解:對稱二叉樹

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool f(TreeNode* a,TreeNode* b){// 先檢查空指針情況if (a == nullptr && b == nullptr) return true;if (a == nullptr || b == nullptr) return false;//這個本身包含兩個都為空,所以要放下面// 再檢查值是否相等(現在安全了)if (a->val != b->val) return false;return f(a->left,b->right)&&f(a->right,b->left);}bool isSymmetric(TreeNode* root) {//如果翻轉之后的二叉樹和之前一樣,則說明對//但是也有其他情況。。所以不能一味去翻轉//兩個子樹判斷是否相等(使用同樣的遍歷順序)if (root == nullptr) return true;return f(root->left,root->right);}
};

深度與高度

  • 二叉樹節點的深度:指從根節點到該節點的最長簡單路徑邊的條數或者節點數(取決于深度從0開始還是從1開始)
  • 二叉樹節點的高度:指從該節點到葉子節點的最長簡單路徑邊的條數或者節點數(取決于高度從0開始還是從1開始)
  • 使用前序求的就是深度,使用后序求的是高度。

104.二叉樹的最大深度 (優先掌握遞歸)

題目鏈接/文章講解/視頻講解: 二叉樹的最大深度

最大深度是要把節點盡可能的往下面放,也就是根節點(到葉子節點)的高度

遞歸遍歷計算其深度

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int f(TreeNode* node){//既然是算根節點到葉子節點的最長路徑的結點數,也就是根節點的高度,則用后序遍歷,返回最長的if(node==NULL) return 0;int ld = f(node->left);// 左int rd = f(node->right);// 右int depth = 1 + max(ld, rd); // 中return depth;}int maxDepth(TreeNode* root) {return f(root);}
};

111.二叉樹的最小深度 (優先掌握遞歸)

和最大深度看似差不多,實則不然。

題目鏈接/文章講解/視頻講解:二叉樹的最小深度

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int f(TreeNode*node){if(node==NULL) return 0;int lm=f(node->left);int rm=f(node->right);if(node->left==NULL&& node->right != NULL) return 1 + rm;//if(node->right==NULL&& node->left != NULL) return 1 + lm;//int md=1+min(lm,rm);return md;}int minDepth(TreeNode* root) {//后序遍歷return f(root);}
};

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

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

相關文章

DNS-Windows上使用DNS

DNS-Windows上使用DNS一、查看與修改DNS配置1.1、查看當前DNS服務器設置1.2、臨時修改 DNS 服務器(命令行)二、DNS緩存相關操作2.1、查看DNS緩存內容2.2、 刷新 DNS 緩存(清除過期記錄)三、測試域名解析(nslookup 工具…

3dsMax 2026 .NET Core 8 轉型下的Maxscript腳本開發:動態編譯模塊的重構策略與兼容性升級路徑

3ds Max 長期以來一直提供出色的 .NET 集成,使 Maxscript 能夠無縫利用任何 .NET 庫的強大功能。部分開發者在工具中廣泛使用了 .NET 功能。 之前,3ds Max 依賴于 .NET Framework 4.8 并且最近更新到了 4.8.1,用于 2025 版本的發布。然而,隨著 3ds Max 2026 的推出,Autod…

golang 做webrtc開發核心

在Golang中進行WebRTC開發,核心在于理解WebRTC協議的工作原理以及如何利用Go生態中的庫來實現關鍵功能。以下是Golang WebRTC開發的核心要點: WebRTC基礎概念 了解ICE(Interactive Connectivity Establishment)協議用于NAT穿越掌握…

RabbitMQ 異步化抗洪實戰

說明:本文僅展示架構思路與安全片段,所有敏感字段已用占位符;不含可直接復刻的生產細節。數據與接口均為演示/虛擬。0. 背景與目標長耗時/不確定接口(如對接第三方機器人平臺)的同步阻塞,容易造成請求堆積與…

接口返回 2 萬條數據,easy-trans導致多了20s耗時排查過程

內網訪問排版核料詳情功能,用戶反饋要等十幾秒排查 sql:sql 比較簡單排查內存計算:arthus trace 類名 方法名 總耗時2s排查頁面渲染是否緩慢:F12 查看接口 等待服務器響應 20s 下載時間 30s, 故不考慮渲染問題排查請求響應日志打…

AIGC入門,手搓大模型客戶端與MCP交互

概述 在現代應用開發中,將大語言模型(LLM)與專用工具服務相結合,可以構建出既能理解自然語言,又能準確執行專業任務的智能代理。本文介紹一個基于 MCP(Model Context Protocol)協議和 Ollama 本…

深度學習:從預備知識到未來展望

在當今數字化時代,深度學習正以前所未有的速度改變著我們的生活和工作方式。從智能語音助手到自動駕駛汽車,從精準醫療到個性化推薦系統,深度學習的應用無處不在。本文將從深度學習的預備知識入手,探討其發展歷程、關鍵技術和未來…

軟考高級系統架構設計師之構件與中間件技術篇

一、構件的定義 定義1:軟件構件是一種組裝單元,它具有規范的接口規約和顯式的語境依賴。軟件構件可以被獨立地部署并由第三方任意地組裝。 定義2:構件是某系統中有價值的、幾乎獨立的并可替換的一個部分,它在良好定義的體系結構語境內滿足某清晰的功能。…

Node.js 文件上傳中文文件名亂碼問題,為什么只有Node會有亂碼問題,其他后端框架少見?

問題現象當用戶上傳包含中文字符的文件時,在服務器端獲取到的文件名可能變成類似 ????.txt 這樣的亂碼,而不是預期的中文文件名。為什么只有Node會亂碼?很多后端框架(如 Java Spring Boot、Python Django、PHP Laravel&#x…

學習英語音標 (從漢語角度看英語音標發音差異)

僅供參考, 跟著教學視頻看不懂時再來看以下引導 以下只寫容易出錯的音標 發音視頻: https://www.jiwake.com/yinbiaofayin/ 音標規則單詞??類似漢語e, 餓~urge?類似漢語e, 餓go??類似漢語o, 哦~walk?類似漢語o, 哦wash?/i?/的短語, 不止發聲短,舌頭不用隆起it?類似漢…

論文筆記(九十一)GWM: Towards Scalable Gaussian World Models for Robotic Manipulation

GWM: Towards Scalable Gaussian World Models for Robotic Manipulation文章概括摘要1. 引言2. 相關工作3. 高斯世界模型(Gaussian World Model)3.1. 世界狀態編碼(World State Encoding)3.2. 基于擴散的動態建模(Dif…

apache phoenix sql 命令大全詳解

這是一份非常詳細的 Apache Phoenix SQL 命令大全和詳解。Phoenix 作為 HBase 上的 SQL 層,其語法大部分與標準 SQL 兼容,但也有許多針對 HBase 的特性擴展。核心概念 在開始之前,請記住 Phoenix 的兩個核心概念: 主鍵&#xff08…

【代碼講解】SO-ARM100 雙場景演示:手柄驅動 Mujoco 仿真 + 實機控制

視頻講解: 【代碼講解】SO-ARM100 雙場景演示:手柄驅動 Mujoco 仿真 實機控制今天介紹下使用使用北通手柄通過控制 Mujoco 中的 SO-ARM100 機械臂,然后將關節數據通過 zmq 通信轉發控制實際機械臂。 本期中會涉及如下點,需要注意…

「數據獲取」《中國教育經費統計年鑒》(1997-2024)

01、數據簡介《中國教育經費統計年鑒》作為我國教育經費領域的核心統計典籍,全面系統地呈現了全國各級各類教育經費的來源構成、分配流向與使用成效。其統計范圍覆蓋學前教育、基礎教育、中等職業教育、高等教育及特殊教育等全學段,數據維度涵蓋財政性教…

使用 Logspout 收集所有容器的

1.將所有容器的輸出路由到遠程 rsyslog 服務器1.修改 rsyslog 配置文件/etc/rsyslog.conf, 從中找到 “# Provides UDP sysilog recepion"語句。并將該處的以下兩行配置代碼行首的“#”字符刪除(取消注釋)[roothost1 ~]# vi /etc/rsyslog.conf [roo…

【智能化解決方案】基于多目標優化檢索增強生成的智能行程規劃方案

📝 基于多目標優化的智能行程規劃方案 1 用戶需求分析與矩陣構建 1.1 核心用戶信息提取 根據用戶提供的年齡、出發地、目的地、出行時間等基本信息,我們首先構建一個用戶特征向量: U {Age, Origin, Destination, TravelDate, Duration, Budg…

軟件研發的演變

軟件研發從一門手工作坊式的藝術,逐步演進為一門系統化、工程化、智能化的現代學科。其發展歷程不僅體現了技術的飛躍,更反映了方法論、協作模式和思維方式的深刻變革。一、發展演變歷程軟件研發的演變可以大致劃分為以下幾個階段:1. 軟件作坊…

「日拱一碼」091 機器學習——集成學習

目錄 集成學習介紹 1. 核心思想 2. 為什么有效? 3. 主要流派與方法 A. 并行方法:Bagging (Bootstrap Aggregating) B. 串行方法:Boosting C. 堆疊法:Stacking 代碼示例 Bagging 的代表 —— 隨機森林 (Random Forest) 集成…

vscode實現第三方包的使用,cmake結合vcpkg(跨平臺)

要使用cmake和vcpkg組織一個完整的現代cpp項目,一般來說需要三個文件vcpkg.json描述第三方依賴項//vcpkg.json {"dependencies": ["fmt"] }//安裝,在vcpkg.json目錄執行 vcpkg installCMakePresets.json定義項目的本質屬性(What&…

DevExpress中Word Processing Document API學習記錄

文章目錄1 文檔結構劃分2 文檔操作基礎2.1 Positions and Ranges2.2 Secitions2.3 Paragraphs2.4 Tables2.5 Lists2.6 Hyperlinks and Bookmarks2.7 Comments2.8 Headers and Footers2.9 Shapes and Pictures2.10 Watermarks2.11 Charts2.12 OLE Objects2.13 ActiveX Controls2…