LeetCode 熱題 100 101. 對稱二叉樹

LeetCode 熱題 100 | 101. 對稱二叉樹

大家好,今天我們來解決一道經典的二叉樹問題——對稱二叉樹。這道題在 LeetCode 上被標記為簡單難度,要求檢查給定的二叉樹是否軸對稱。


問題描述

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

示例 1:

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

示例 2:

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

提示:

  • 樹中節點數目在范圍 [1, 1000]
  • -100 <= Node.val <= 100

解題思路

核心思想
  1. 遞歸法

    • 使用遞歸法檢查二叉樹是否對稱。
    • 對于兩個子樹,如果它們的根節點值相等,并且左子樹的左子樹與右子樹的右子樹對稱,左子樹的右子樹與右子樹的左子樹對稱,則這兩個子樹對稱。
  2. 遞歸函數

    • 定義一個輔助函數 isSymmetric,用于檢查兩個子樹是否對稱。

Python代碼實現

class Solution:def isSymmetric(self, root: TreeNode) -> bool:if not root:return Truedef isMirror(left: TreeNode, right: TreeNode) -> bool:if not left and not right:return Trueif not left or not right:return Falsereturn (left.val == right.val) and isMirror(left.left, right.right) and isMirror(left.right, right.left)return isMirror(root.left, root.right)

代碼解析

  1. 基本情況

    • 如果根節點為空,直接返回 True,因為空樹是對稱的。
  2. 遞歸函數

    • 定義一個輔助函數 isMirror,用于檢查兩個子樹是否對稱。
    • 如果兩個子樹都為空,返回 True
    • 如果一個子樹為空,另一個不為空,返回 False
    • 如果兩個子樹的根節點值相等,并且左子樹的左子樹與右子樹的右子樹對稱,左子樹的右子樹與右子樹的左子樹對稱,則返回 True
  3. 遞歸調用

    • 調用 isMirror 函數,檢查根節點的左子樹和右子樹是否對稱。

復雜度分析

  • 時間復雜度:O(n),其中 n 是樹中節點的數量。每個節點被訪問一次。
  • 空間復雜度:O(h),其中 h 是樹的高度。遞歸調用棧的深度最多為樹的高度。

示例運行

示例 1
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例 2
輸入:root = [1,2,2,null,3,null,3]
輸出:false

總結

通過遞歸法,我們可以高效地檢查二叉樹是否對稱。遞歸函數 isMirror 用于比較兩個子樹是否對稱,確保每個節點的值和結構都符合對稱條件。希望這篇題解對大家有所幫助,如果有任何問題,歡迎在評論區留言討論!

關注我,獲取更多算法題解和編程技巧!

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

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

相關文章

圖形化編程革命:iVX攜手AI 原生開發范式

一、技術核心&#xff1a;圖形化編程的底層架構解析 1. 圖形化開發的效率優勢&#xff1a;代碼量減少 72% 的秘密 傳統文本編程存在顯著的信息密度瓶頸。以 "按鈕點擊→條件判斷→調用接口→彈窗反饋" 流程為例&#xff0c;Python 實現需定義函數、處理縮進并編寫 …

uniapp跨平臺開發HarmonyOS NEXT應用初體驗

之前寫過使用uniapp開發鴻蒙應用的教程&#xff0c;簡單介紹了如何配置開發環境和運行項目。那時候的HbuilderX還是4.22版本&#xff0c;小一年過去了HbuilderX的正式版本已經來到4.64&#xff0c;歷經了多個版本的更新后&#xff0c;跨平臺開發鴻蒙應用的體驗大幅提升。今天再…

windows怎么修改DNS

好的&#xff0c;在 Windows 操作系統中修改 DNS 設置有幾種方法&#xff0c;最常用的是通過“網絡和 Internet 設置”。以下是詳細步驟&#xff1a; 方法一&#xff1a;通過設置應用修改 DNS (適用于 Windows 10/11) 打開設置&#xff1a; 點擊屏幕左下角的 Windows 開始按鈕…

Java基本數據類型緩存池解析-源碼剖析

拋出問題&#xff1a;new Integer(18) 與 Integer.valueOf(18) 的區別是什么&#xff1f; new Integer(18) 每次都會新建一個對象;Integer.valueOf(18) 會使?用緩存池中的對象&#xff0c;多次調用只會取同?一個對象的引用 Integer x new Integer(18); Integer y new Int…

WORD壓縮兩個免費方法

日常辦公和學習中&#xff0c;Word文檔常常因為包含大量圖片、圖表或復雜格式而導致文件體積過大&#xff0c;帶來諸多不便&#xff0c;比如 郵件發送受限&#xff1a;許多郵箱附件限制在10-25MB&#xff0c;大文件無法直接發送 存儲空間占用&#xff1a;大量文檔占用硬盤或云…

羅技無線鼠標的配對方法

羅技鼠標的配對方法&#xff1a; 重新連接鼠標 請按照以下步驟將鼠標與 USB 接收器重新配對。 1.將USB接收器插入計算機。 2.將鼠標關閉電源。 3.按住并持續按住向右按鈕&#xff0c;直到操作結束。 4.切換鼠標電源。 5. 單擊一次左側按鈕。 6. 單擊一次中間按鈕。 7.全部松開&…

四、Hadoop 2.X vs 3.X:特性、架構與性能全解析

Hadoop 2.X 與 Hadoop 3.X 深度對比&#xff1a;版本特性、架構與性能剖析 在大數據處理的浪潮中&#xff0c;Hadoop 憑借其分布式存儲與計算的強大能力&#xff0c;成為了業界的核心框架之一。隨著技術的不斷演進&#xff0c;Hadoop 也經歷了多個重要版本的迭代。其中&#x…

【React中useReducer鉤子詳解】

useReducer 是 React 中用于管理復雜狀態邏輯的 Hook&#xff0c;它通過 集中式狀態更新邏輯 替代 useState&#xff0c;尤其適合處理多值關聯狀態或依賴前序狀態更新的場景。以下是其核心要點&#xff1a; 1. 核心概念 Reducer 模式&#xff1a;靈感來自 JavaScript 的 Array…

【C++】C++函數指針詳解與實用技巧

C函數指針詳解與實用技巧 在C中&#xff0c;**函數指針&#xff08;Function Pointer&#xff09;**是一種強大而靈活的工具&#xff0c;常用于回調機制、策略模式、事件處理等場景。本文將從概念、語法、常見用法到實戰示例&#xff0c;帶你全面掌握C函數指針。 &#x1f9e0…

【計算機視覺】基于深度學習的實時情緒檢測系統:emotion-detection項目深度解析

基于深度學習的實時情緒檢測系統&#xff1a;emotion-detection項目深度解析 1. 項目概述2. 技術原理與模型架構2.1 核心算法1) 數據預處理流程2) 改進型MobileNetV2 2.2 系統架構 3. 實戰部署指南3.1 環境配置3.2 數據集準備3.3 模型訓練3.4 實時推理 4. 常見問題與解決方案4.…

IC ATE集成電路測試學習——電流測試的原理和方法

電流測試 我們可以通過電流來判斷芯片的工作狀態時&#xff0c;首先先了解下芯片的電流是如何產生的。 靜態電流 理論上&#xff0c;CMOS結構的芯片靜態時幾乎不耗電 CMOS基本結構&#xff1a;Pmos Nmos 串聯當邏輯電平穩定時&#xff1a; ? 要么Pmos導通&#xff0c;Nmo…

stm32week15

stm32學習 十一.中斷 2.NVIC Nested vectored interrupt controller&#xff0c;嵌套向量中斷控制器&#xff0c;屬于內核(M3/4/7) 中斷向量表&#xff1a;定義一塊固定的內存&#xff0c;以4字節對齊&#xff0c;存放各個中斷服務函數程序的首地址&#xff0c;中斷向量表定…

list類的詳細講解

【本節目標】 1. list的介紹及使用 2. list的深度剖析及模擬實現 3. list與vector的對比 1. list的介紹及使用 1.1 list的介紹 1. list 是可以在常數范圍內在任意位置進行插入和刪除的序列式容器&#xff0c;并且該容器可以前后雙向迭代。 2. list 的底層是雙向鏈表結構&a…

第十節:圖像處理基礎-圖像算術運算 (加法、減法、混合)

引言 在計算機視覺領域,圖像算術運算是最基礎卻至關重要的核心技術。無論是實現簡單的圖片合成、開發智能監控系統,還是構建復雜的醫學影像分析工具,加減運算和混合操作都扮演著關鍵角色。OpenCV作為最流行的計算機視覺庫,提供了完善的圖像處理函數集。本文將深入解析三種…

【React 的useState鉤子詳解】

React 的 useState 鉤子詳解 useState 是 React 中最基礎且最常用的 Hook 之一&#xff0c;它允許你在函數組件中添加和管理狀態。 基本語法 const [state, setState] useState(initialState);initialState: 狀態的初始值&#xff0c;可以是任何 JavaScript 數據類型state:…

vue 中的數據代理

在 Vue 中&#xff0c;數據代理&#xff08;Data Proxy&#xff09; 是 Vue 實現 MVVM 模式 的關鍵技術之一。Vue 使用數據代理讓你可以通過 this.message 訪問 data.message&#xff0c;而不需要寫 this.data.message —— 這大大簡化了模板和邏輯代碼。 我們來深入理解它的本…

基于Python的網絡電子書閱讀系統

標題:基于Python的網絡電子書閱讀系統 內容:1.摘要 隨著數字化閱讀的興起&#xff0c;網絡電子書閱讀需求日益增長。本研究旨在開發一個基于Python的網絡電子書閱讀系統&#xff0c;以滿足用戶便捷閱讀電子書的需求。采用Python的Flask框架搭建Web服務器&#xff0c;結合SQLit…

基于SpringBoot的抽獎系統測試報告

一、編寫目的 本報告為抽獎系統測試報告&#xff0c;本項目可用于團體抽獎活動&#xff0c;包括了用戶注冊&#xff0c;用戶登錄&#xff0c;修改獎項以及抽獎等功能。 二、項目背景 抽獎系統采用前后端分離的方法來實現&#xff0c;同時使用了數據庫來存儲相關的數據&…

Apache Flink 與 Flink CDC:概念、聯系、區別及版本演進解析

Apache Flink 與 Flink CDC:概念、聯系、區別及版本演進解析 在實時數據處理和流式計算領域,Apache Flink 已成為行業標桿。而 Flink CDC(Change Data Capture) 作為其生態中的重要組件,為數據庫的實時變更捕獲提供了強大的能力。 本文將從以下幾個方面進行深入講解: 什…

單片機-STM32部分:9、定時器

飛書文檔https://x509p6c8to.feishu.cn/wiki/A749wx8T0ioqfgkzZKlc9poknUf SMT32F1系列共有8個定時器&#xff1a; 基本定時器&#xff08;TIM6、TIM7&#xff09; 通用定時器&#xff08;TIM2、TIM3、TIM4、TIM5&#xff09; 高級定時器&#xff08;TIM1、TIM8&#xff09…