leetcode101.對稱二叉樹樹(遞歸練習題)

文章目錄

  • 一、 題目描述
  • 二、 核心思路:判斷左右子樹是否互為鏡像
  • 三、 遞歸的終止條件 (Base Cases)
  • 四、 代碼實現與深度解析
  • 五、 關鍵點與復雜度分析
  • 六、 總結與對比 (LC100 vs LC101)

LeetCode 101. 對稱二叉樹 - 力扣【難度:簡單;通過率:62.6%】,這道題與前一題:LeetCode100 基本相似,都是遞歸的思路,解法可以對照參考上一篇博文: leetcode100.相同的樹(遞歸練習題)

一、 題目描述

給你一個二叉樹的根節點 root,檢查它是否是 鏡像對稱(軸對稱)

示例:

示例 1:

輸入: root = [1,2,2,3,4,4,3]
輸出: true

示例 1

示例 2:

輸入: root = [1,2,2,null,3,null,3]
輸出: false

示例 2


二、 核心思路:判斷左右子樹是否互為鏡像

一棵樹是否對稱,其本質在于:它的左子樹和右子樹是否互為鏡像

因此,我們可以將問題分解為:

  1. 從根節點開始,判斷其左子樹和右子樹是否互為鏡像
  2. 遞歸地,對于任意一對需要判斷是否互為鏡像的節點 leftright
    • left 的左孩子,應該與 right 的右孩子互為鏡像
    • left 的右孩子,應該與 right 的左孩子互為鏡像

三、 遞歸的終止條件 (Base Cases)

在遞歸函數中,正確處理基準情況是關鍵。對于判斷兩個節點是否互為鏡像,有以下幾種情況:

  • 情況一:兩個節點都為空
    • 如果 leftright 都為 null,它們是鏡像的。返回 true
  • 情況二:只有一個節點為空
    • 如果 leftnullright 不為 null,或者 left 不為 nullrightnull,它們不可能是鏡像的。返回 false
  • 情況三:兩個節點都不為空,但值不同
    • 如果 leftright 都不為 null,但 left.val != right.val,它們的值不同,因此不互為鏡像。返回 false

四、 代碼實現與深度解析

【一種參考代碼】:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {// 主入口函數:判斷整棵樹是否對稱,即判斷其左子樹和右子樹是否互為鏡像public boolean isSymmetric(TreeNode root) {// 如果根節點為空,根據定義,空樹也是對稱的if (root == null) {return true;}// 調用輔助函數,判斷根節點的左右孩子是否互為鏡像return isMirror(root.left, root.right);}/*** 輔助遞歸函數:判斷兩棵子樹(以 left 和 right 為根)是否互為鏡像* @param left  第一棵子樹的根節點* @param right 第二棵子樹的根節點* @return 如果兩棵子樹互為鏡像,則返回 true;否則返回 false*/public boolean isMirror(TreeNode left, TreeNode right) {// 1. 基準情況一:兩個節點都為空,它們互為鏡像if (left == null && right == null) {return true;}// 2. 基準情況二:只有一個節點為空(由于是 else if,排除了都為空的情況)// 此時,一個為空,一個不為空,肯定不互為鏡像else if (left == null || right == null) {return false;}// 3. 基準情況三:兩個節點都不為空,但值不相等,不互為鏡像else if (left.val != right.val) {return false;}// 4. 遞歸調用:// 如果以上基準情況都未命中(即 left 和 right 都不為空且值相等),// 則繼續遞歸判斷它們的子節點是否互為鏡像// 關鍵點:left 的左孩子要與 right 的右孩子比較 (isMirror(left.left, right.right))//         left 的右孩子要與 right 的左孩子比較 (isMirror(left.right, right.left))// 只有這兩對都互為鏡像,當前這對節點才算互為鏡像return isMirror(left.left, right.right) && isMirror(left.right, right.left);}
}

五、 關鍵點與復雜度分析

  • 函數職責分離isSymmetric 負責初始調用,isMirror 負責具體的遞歸判斷。這種分離使得代碼邏輯更清晰
  • 對稱性體現:遞歸調用 isMirror(left.left, right.right)isMirror(left.right, right.left) 是本題的核心,它完美地體現了鏡像對稱的定義
  • Base Case 的全面性:對三種基準情況的清晰劃分,確保了遞歸的正確終止和各種邊界條件的覆蓋
  • 時間復雜度O(N) 其中 N 是二叉樹的節點數。每個節點最多被訪問一次(通過 isMirror 函數中的 leftright 參數),進行常數次比較操作
  • 空間復雜度O(H) 其中 H 是二叉樹的高度。這主要是遞歸調用棧的空間開銷。最壞情況下(樹退化為鏈表),H 可以達到 N,所以空間復雜度為 O(N)

六、 總結與對比 (LC100 vs LC101)

特性LeetCode 100 (相同的樹)LeetCode 101 (對稱二叉樹)
問題定義判斷兩棵獨立的樹 pq 是否結構和值都相同判斷一棵樹 root 是否自身鏡像對稱
遞歸入口isSameNode(p, q)isMirror(root.left, root.right)
遞歸調用isSameNode(p.left, q.left)isSameNode(p.right, q.right)isMirror(left.left, right.right)isMirror(left.right, right.left)
核心差異同向比較:左對左,右對右交叉比較:左的左對右的右,左的右對右的左

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

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

相關文章

【國內電子數據取證廠商龍信科技】誰是躲在“向日葵”后的

一、前言大家可能每天都在使用在遠控軟件,我們在享受遠控軟件帶來的便利同時,犯罪者也在使用遠控軟件進行違法犯罪活動,以達到隱藏自己的目的。市面上常用的遠控軟件有“向日葵”、“TeamViewer”。二、案件背景在一次電信詐騙案件支援中&…

SAP-PP-MRPLIST

MRP(物料需求計劃)分析功能,主要包含以下要點: 程序通過選擇工廠和物料/銷售訂單范圍作為輸入條件,支持兩種展示方式:ALV表格和樹形結構 核心功能包括: 物料主數據查詢(MAKT/MARA表) 銷售訂單數據查詢(VBAP表) BOM展開(CS_BOM_EXPL_MAT_V2函數) MRP數據獲取(MA…

MIT線性代數01_方程組的幾何解釋

Linear Algebra Lecture #1 W. Gilbert Strangn linear equations, n unknowns row picturecol pictureMatrix form {2x?y0?x2y3 \left\{\begin{matrix} 2x - y 0 \\ -x 2y 3 \end{matrix}\right. {2x?y0?x2y3? 1 Row Picture2 Column PictureWhat are all combination…

FreeRTOS-中斷管理

學習內容中斷概念中斷是計算機系統中一種重要的事件驅動機制,用于在特定條件下打斷正在執行的程序,并跳轉到預定義的中斷處理程序中執行特定的操作。當發生中斷時,處理器會立即中止當前正在執行的指令,保存當前的執行狀態&#xf…

圖像梯度處理與邊緣檢測

在圖像處理的世界里,我們常常需要從復雜的像素矩陣中提取有意義的信息 —— 比如一張照片中物體的輪廓、醫學影像中病灶的邊界、自動駕駛視野里的道路邊緣。這些 “邊界” 或 “輪廓” 在專業術語中被稱為 “邊緣”,而捕捉邊緣的核心技術,離不…

GPU服務器與PC 集群(PC農場):科技算力雙子星

在數字經濟高速發展的今天,算力已成為驅動科技創新與產業變革的核心引擎。GPU服務器憑借其強大的并行計算能力,在圖形渲染、人工智能訓練等領域展現出不可替代的優勢;而PC集群則通過分布式架構,以高性價比和靈活擴展特性&#xff…

秋招Day19 - 分布式 - 分布式鎖

單體時代,可以直接用本地鎖來實現對競爭資源的加鎖,分布式環境下就要用到分布式鎖了有哪些分布式鎖的實現方案?MySQL分布式鎖、Zookeeper分布式鎖、Redis分布式鎖MySQL分布式鎖如何實現?創建一張鎖表,對字段定義唯一性…

AIStarter平臺亮點解析:從ComfyUI項目上架到一鍵運行的完整指南

大家好!今天分享一個AIStarter平臺的深度體驗,帶你了解如何通過這個平臺輕松上架和運行AI項目!視頻中,博主在凌晨分享了AIStarter的強大功能,重點展示了ComfyUI 4.0和5.0整合包的上架過程,以及如何簡化AI項…

電腦錄屏軟件推薦:如何使用oCam錄制游戲、教程視頻

在工作、學習或游戲過程中,我們經常需要錄制電腦屏幕,比如制作教程視頻、記錄游戲操作、分享軟件使用過程等。oCam 是一款功能強大且操作簡單的屏幕錄制工具,支持 Windows 系統,深受用戶喜愛。今天簡鹿辦公就來手把手教你如何使用…

安裝cuml報錯

安裝命令 (注意cuda的版本) pip install --no-cache-dir --extra-index-urlhttps://pypi.nvidia.com cuml-cu11 報錯: 找了很多網上的教程 1.版本問題 沒解決 pip install --upgrade pip pip install --upgrade setuptools 2.參考下面博…

【ECharts?】解決Vue 中 v-show 導致組件 ECharts 樣式異常問題

解決Vue 中 v-show 導致組件 ECharts 樣式異常問題 問題概述 在使用 Vue 的 v-show 指令實現 <PageOne/>、<PageTwo/>、<PageThree/> 三個視圖的定時切換時&#xff0c;<PageTwo/> 顯示時出現了異常&#xff0c;具體表現為 ECharts 圖表渲染圖表尺寸異…

旅游管理虛擬仿真實訓室:重構實踐教學新生態

在旅游產業數字化轉型與教育信息化深度融合的背景下&#xff0c;旅游管理虛擬仿真實訓室成為連接理論教學與行業實踐的關鍵紐帶。它通過沉浸式技術還原旅游場景&#xff0c;解決傳統實訓中資源受限、風險較高、時空局限等問題&#xff0c;為旅游管理專業人才培養提供全新路徑。…

【在線五子棋對戰】十、對戰玩家匹配管理模塊

文章目錄前言Ⅰ. 匹配隊列實現Ⅱ. 匹配隊列管理類實現完整代碼前言 五子棋對戰的玩家匹配是根據自己的天梯分數進行匹配的&#xff0c;而服務器中將玩家天梯分數分為三個檔次&#xff1a; 青銅&#xff1a;天梯分數小于 2000 分白銀&#xff1a;天梯分數介于 2000~3000 分之間…

k8s之ingress定義https訪問方式

接上文&#xff1a;https://blog.csdn.net/soso678/article/details/149607069?spm1001.2014.3001.5502定義后端應用與service [rootmaster ingress]# cat my-nginx.yml apiVersion: apps/v1 kind: Deployment metadata:name: my-nginx spec:selector:matchLabels:run: my-n…

《C++ vector 完全指南:vector的模擬實現》

《C vector 完全指南&#xff1a;vector的模擬實現》 文章目錄《C vector 完全指南&#xff1a;vector的模擬實現》一、定義vector的成員變量二、用vector實現動態二維數組三、vector的接口實現1.vector的默認成員函數&#xff08;1&#xff09;構造函數實現&#xff08;2&…

騰訊云代碼助手使用指南

騰訊云代碼助手使用指南什么是騰訊云代碼助手功能區展示功能介紹功能演示一、創建新項目1.先用Chat 把口語化的需求轉換成AI更容易接受的結構化提示詞2.再用Craft 模式進行代碼生成3.成果展示二、老項目探索1.使用Codebase 幫理解項目代碼三、代碼補全1.只需輸入標準的函數名&a…

【vue3+vue-pdf-embed】實現PDF+圖片預覽

【vue3vue-pdf-embed】實現PDF圖片預覽項目背景項目代碼分析代碼項目背景 技術棧&#xff1a;vue3Tselementplus 需要實現PDF和圖片預覽 圖片預覽很好解決了&#xff0c;可以用elementplus 自帶的組件el-image 可實現 PDF預覽可以用搜了一圈&#xff0c;有兩個方案&#xff0c…

Leetcode力扣解題記錄--第21題(合并鏈表)

題目鏈接&#xff1a;21. 合并兩個有序鏈表 - 力扣&#xff08;LeetCode&#xff09; 題目描述 將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例 1&#xff1a; 輸入&#xff1a;l1 [1,2,4], l2 [1,3,4] 輸出&…

基于單片機的樓宇門禁系統的設計與實現

2、系統總體設計 2.1硬件的總體設計 為了使門禁系統智能化&#xff0c;需要一個主控芯片對整個門禁系統進行管理控制。接著還需要對應的模塊完成包括數字密碼驗證和IC卡識別驗證的功能。當出現非法闖入、驗證失敗等情況時還需要對操作人員進行警告。最后需要一個人機交互界面方…

全天候自動化數字型智能驅鳥裝置,電網防鳥高科技

鳥類在輸電線路鐵塔、電線桿上筑巢、棲息和排泄是個大問題&#xff0c;很容易引發線路故障導致停電。為了保障電網安全穩定運行&#xff0c;會用到各種智能驅鳥裝置來驅趕鳥類&#xff0c;避免涉鳥故障發生。例如全天候自動化數字型智能驅鳥裝置&#xff0c;其厲害的地方在于它…