Go語言實戰案例-判斷二叉樹是否對稱

給定一棵二叉樹,判斷這棵樹是否是對稱的。對稱的含義是:這棵樹的左子樹和右子樹在結構上是鏡像對稱的,且對應節點的值相等。

示例 1:

????1/?\2???2/?\?/?\
3??4?4??3輸出:true

示例 2:

????1/?\2???2\???\3????3輸出:false

二、應用場景

  • ? 用戶界面或布局中驗證左右對稱性
  • ? 算法競賽題目或筆試面試常考
  • ? 樹結構可視化或分析工具中,對稱性判斷用于簡化處理

三、解題思路

本問題的關鍵在于:比較樹的左子樹和右子樹是否鏡像對稱

我們可以采用兩種方法:

方法一:遞歸判斷

判斷左右子樹是否滿足以下三個條件:

  1. 1. 左子樹的左子樹和右子樹的右子樹對稱;
  2. 2. 左子樹的右子樹和右子樹的左子樹對稱;
  3. 3. 當前兩個節點值相同。

方法二:迭代判斷(借助隊列)

使用隊列存儲成對的節點,每次成對彈出并比較:

  • ? 若都為空,繼續;
  • ? 若一個為空另一個不為空 → 不對稱;
  • ? 值不相等 → 不對稱;
  • ? 否則將子節點成對壓入隊列,繼續判斷。

四、Go語言實現

1. 數據結構定義

package?mainimport?"fmt"type?TreeNode?struct?{Val???intLeft??*TreeNodeRight?*TreeNode
}

2. 方法一:遞歸法

func?isSymmetric(root?*TreeNode)?bool?{if?root?==?nil?{return?true}return?isMirror(root.Left,?root.Right)
}func?isMirror(left,?right?*TreeNode)?bool?{if?left?==?nil?&&?right?==?nil?{return?true}if?left?==?nil?||?right?==?nil?{return?false}if?left.Val?!=?right.Val?{return?false}return?isMirror(left.Left,?right.Right)?&&?isMirror(left.Right,?right.Left)
}

3. 方法二:迭代法(使用隊列)

func?isSymmetricIterative(root?*TreeNode)?bool?{if?root?==?nil?{return?true}queue?:=?[]*TreeNode{root.Left,?root.Right}for?len(queue)?>?0?{left?:=?queue[0]right?:=?queue[1]queue?=?queue[2:]if?left?==?nil?&&?right?==?nil?{continue}if?left?==?nil?||?right?==?nil?||?left.Val?!=?right.Val?{return?false}queue?=?append(queue,?left.Left,?right.Right)queue?=?append(queue,?left.Right,?right.Left)}return?true
}

五、測試樣例

func?main()?{//?構建對稱二叉樹root?:=?&TreeNode{Val:?1}root.Left?=?&TreeNode{Val:?2}root.Right?=?&TreeNode{Val:?2}root.Left.Left?=?&TreeNode{Val:?3}root.Left.Right?=?&TreeNode{Val:?4}root.Right.Left?=?&TreeNode{Val:?4}root.Right.Right?=?&TreeNode{Val:?3}fmt.Println("遞歸判斷結果:",?isSymmetric(root))???????????//?truefmt.Println("迭代判斷結果:",?isSymmetricIterative(root))?//?true
}

六、復雜度分析

方式時間復雜度空間復雜度
遞歸法O(n)O(h)
迭代法O(n)O(n)
  • ? n 表示節點數量;
  • ? h 表示樹的高度(遞歸調用棧的深度);
  • ? 迭代方法使用了隊列,需要額外 O(n) 空間存儲節點。

七、可視化理解

將二叉樹從中心線對折,看左、右兩部分是否完全重合,節點值是否相等。

鏡像對稱結構滿足:

  • ??left.Left?==?right.Right
  • ??left.Right?==?right.Left

八、變種與擴展

  1. 1.?判斷 N 叉樹是否鏡像對稱:需要成對比較左右子節點;
  2. 2.?輸出是否對稱的最小修改操作:可結合動態規劃思想;
  3. 3.?判斷對稱層級:例如僅判斷前兩層是否對稱。

九、總結

內容說明
核心判斷條件左右子樹是否鏡像結構,對應節點值是否相等
遞歸 vs 迭代遞歸寫法更直觀,迭代適合大樹或避免棧溢出
技巧點左-右子樹配對判斷,使用隊列模擬遞歸過程
實用價值面試高頻,掌握樹結構對稱性判斷通用技巧

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

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

相關文章

【機器學習深度學習】為什么需要分布式訓練?

目錄 前言 一、模型規模爆炸:單卡GPU已難以承載 1.1 問題描述 1.2 面臨挑戰 1.3 解決方案:模型并行 (Model Parallelism) 1.4 類比理解:模型并行 1.5 模型并行的關鍵點 1.6 模型并行(Model Parallelism)的流程…

二十八、【Linux系統域名解析】DNS安裝、子域授權、緩存DNS、分離解析、多域名解析

DNS服務深度解析:緩存、分離與多域名管理一、DNS服務架構全景DNS核心組件關系DNS服務器類型對比二、基礎DNS服務配置1. Bind9核心配置文件2. 區域文件結構解析區域文件記錄類型表三、子域授權與分層解析子域授權原理子域配置流程1. 父域配置2. 子域配置遞歸與迭代查…

【LeetCode】前綴表相關算法

目錄1、介紹2、核心概念【1】前綴和后綴【2】最長公共前后綴(LPS)3、相關算法題【1】找出字符串中第一個匹配項的下標【2】重復的子字符串1、介紹 前綴表是一種在字符串匹配算法(特別是KMP算法)中使用的數據結構,用于…

(六) Spring AI 1.0版本 + 千問大模型+RAG

上篇文章我們大概講了一下向量模型的知識&#xff0c;本篇文章&#xff0c;我們將會通過RAG實戰的形式&#xff0c;來感受一下RAG。 項目準備 pom.xml 這里我們需要引入向量庫和pdf相關的包<dependency><groupId>org.springframework.ai</groupId><artifa…

Spring Boot與Mybatis-Plus集成SQLServer的完整指南

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;本項目旨在演示如何將SQLServer與Spring Boot以及Mybatis-Plus框架進行整合&#xff0c;打造一個高效穩定的后端服務。詳細介紹涉及了數據庫連接、實體類定義、Mapper接口創建、Service層業務邏輯編寫、Control…

【工作筆記】判斷一條方法需不需要事務/AOP

① 看注解方法/類上有 Transactional → 需要事務&#xff0c;必須走代理方法/類上有自定義 AOP 注解&#xff08;如 Log、Retry、Cacheable 等&#xff09;→ 需要代理什么都沒有 → 幾乎肯定不需要示例需求Transactional public void generateDailyTask(...)? 需要事務publi…

Unity 的UI動畫調節

在游戲開發中&#xff0c;精美的UI動畫能極大提升用戶體驗。Unity提供了強大的動畫系統&#xff0c;讓開發者可以輕松創建流暢的界面動效。本文將介紹UI動畫的核心概念、制作流程和實用技巧。一、核心動畫組件Animation窗口 - 可視化創建關鍵幀動畫Animator組件 - 控制動畫狀態…

26考研11408數據結構

數據結構 1.緒論1.1.1數據結構的基本概念 數據數據元素&#xff1a;數據的基本單位&#xff0c;一個數據元素由多個數據項組成&#xff0c;數據項是組成數據元素不可分割的最小單位數據對象&#xff1a;具有相同性質的數據元素的集合&#xff0c;是數據的一個子集數據類型&…

Solar月賽(應急響應)——攻擊者使用什么漏洞獲取了服務器的配置文件?

某某文化有限公司的運維小王剛剛搭建服務器發現cpu莫名的異常的升高請你幫助小王排查一下服務器。 文章目錄事件介紹事件1&#xff1a;幫助小王找到是什么漏洞?事件2&#xff1a;系統每天晚上系統都會卡卡的幫小明找到問題出在了那&#xff1f;事件3&#xff1a;惡意域名是什么…

高頻面試題

1.HashMap的底層原理JDK1.7版本之前&#xff0c;HashMap的底層數據結構是數組鏈表&#xff0c;HashMap通過哈希算法會將元素的key映射待數組的的槽位(Bucket)。如果多個鍵映射到同一個槽位&#xff0c;就會以鏈表的形式存儲在同一個槽位上。但是鏈表的查詢的復雜度O(n),所有沖突…

魚皮項目簡易版 RPC 框架開發(四)

本文為筆者閱讀魚皮的項目 《簡易版 RPC 框架開發》的筆記&#xff0c;如果有時間可以直接去看原文&#xff0c; 1. 簡易版 RPC 框架開發 前面的內容可以筆者的前面幾篇筆記 魚皮項目簡易版 RPC 框架開發&#xff08;一&#xff09; 魚皮項目簡易版 RPC 框架開發&#xff08;二…

力扣-79.單詞搜索

題目鏈接 79.單詞搜索 class Solution {int m, n;public boolean exist(char[][] board, String word) {m board.length;n board[0].length;boolean[][] visited new boolean[m][n];// 遍歷網格中的每個單元格作為搜索起點for (int i 0; i < m; i) {for (int j 0; j …

LabVIEW的To More Specific Class功能說明

?To More Specific Class 是 LabVIEW 中用于控件引用類型轉換的關鍵函數。可將通用 GObject 引用&#xff0c;精準轉為 Listbox、TreeControl 等特定控件類引用&#xff0c;讓開發者能調用專屬屬性&#xff08;如獲取列表行數&#xff09;&#xff0c;實現對不同控件類的差異化…

Ubuntu20.04安裝和配置Samba實現Win11下共享文件夾

Samba是在Linux和UNIX系統上實現 SMB / CIFS 協議的開源軟件&#xff0c;主要用于局域網內的文件共享和打印服務。Samba通過SMB/CIFS協議實現跨平臺資源共享&#xff0c;支持匿名用戶和本地用戶訪問共享目錄&#xff0c;客戶端主要為Windows系統。其核心進程包括&#xff1a; ?…

設計模式(八)結構型:橋接模式詳解

設計模式&#xff08;八&#xff09;結構型&#xff1a;橋接模式詳解橋接模式&#xff08;Bridge Pattern&#xff09;是 GoF 23 種設計模式中的結構型模式之一&#xff0c;其核心價值在于將抽象部分與實現部分分離&#xff0c;使它們可以獨立變化。它通過“組合”而非“繼承”…

【邊緣填充】——圖像預處理(OpenCV)

目錄 1 邊界復制&#xff08;BORDER_REPLICATE&#xff09; 2 邊界反射&#xff08;BOEDER_REFLECT&#xff09; 3 邊界反射101&#xff08;BORDER_REFLECT101&#xff09; 4 邊界常數&#xff08;BORDER_CONSTANT&#xff09; 5 邊界包裹&#xff08;BORDER_WRAP&#xf…

git同步到github出錯-幾個問題-一天晚上(2025.7.29)

訪問不了github 代理和加速器都正常&#xff0c;但是就是訪問不了這個網站嘗試過幾種方法都不行&#xff0c;后面突然可以了。 之后發現一種情況會不行&#xff1a;同時開啟 同步不了 http連接 https://blog.csdn.net/m0_73972962/article/details/146198392 一堆問題 ssh連接才…

Redis未授權訪問的利用的幾種方法原理以及條件

一、redis通過定時任務反彈shell1.利用條件&#xff1a;需要能夠登錄redis數據庫&#xff0c;并且redis以root用戶運行。同時/var/spool/cron目錄要具有寫和執行權限。二、Redis主從getshell1.原理&#xff1a;在Redis 4.x之后&#xff0c;Redis新增了模塊功能&#xff0c;通過…

DNF 與 YUM 的區別詳解:從 CentOS 7 到 CentOS 9 的演進

&#x1f365; DNF 與 YUM 的區別詳解&#xff1a;從 CentOS 7 到 CentOS 9 的演進標簽&#xff1a;CentOS、YUM、DNF、Linux 包管理、系統升級、兼容性 適用版本&#xff1a;CentOS 7、CentOS 8、CentOS 9&#x1f9e9; 一、背景介紹 CentOS 中使用的包管理工具是 RedHat 系列…

mp核心功能

條件構造器mybatisPlus支持各種復雜的where條件, 滿足日常的開發wrapper類就是條件構造器提供了很多子類條件構造器的用法&#xff1a;QueryWrapper和LambdaQueryWrapper通常用來構建select、delete、update的where條件部分UpdateWrapper和LambdaUpdateWrapper通常只有在set語句…