c語言-數據結構-沿順相同樹解決對稱二叉樹問題的兩種思路

二叉樹OJ

  • 前言
  • 對稱二叉樹


前言

本篇繼續講解二叉樹OJ題目之對稱二叉樹


對稱二叉樹

題目鏈接:https://leetcode.cn/problems/symmetric-tree/description/
在這里插入圖片描述
在這里插入圖片描述
該題要求比較這棵樹是否對稱,對稱,指的是結構對稱并且值也要對稱,即對應節點相等,如上圖示例2中,它的結構并不對稱,因此不可視為對稱樹

再如示例1,結構對稱,并且值也對稱,即對稱節點的值也相同,那么便可視為對稱樹

因為題目告知該樹至少有一個節點,所以比較的自然是根節點的左右子樹,那么我們可以延續判斷兩棵樹是否相同的思路

解決該題有兩種思路

我們以題目示例1的二叉樹作為示例進行講解

第一種思路:
我們將該樹根節點的左子樹記為p樹,右子樹記為q樹,之后翻轉p樹或者q樹中任意一個,得到新的p樹或q樹,最后比較p樹和q樹是否相等即可
在這里插入圖片描述
翻轉p樹后如圖所示:
在這里插入圖片描述
此時我們比較p樹和q樹是否相同即可,若為相同樹,則原二叉樹為對稱樹,若不為相同樹則否
代碼實現:
在這里插入圖片描述

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isSameTree(struct TreeNode* p,struct TreeNode* q)
{if(p == NULL && q == NULL){return true;}else if(p == NULL){return false;}else if(q == NULL){return false;}else if(p->val != q->val){return false;}return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
void invertTree(struct TreeNode* root)
{if(root == NULL){return;}struct TreeNode* tmp = root->left;root->left = root->right;root->right = tmp;invertTree(root->left);invertTree(root->right);
}
bool isSymmetric(struct TreeNode* root) {invertTree(root->left);return isSameTree(root->left,root->right);
}

第二種思路:
我們將該樹根節點的左子樹記為p樹,右子樹記為q樹,之后比較p樹和q樹是否對稱即可
在這里插入圖片描述
如第一種思路,我們是將p樹q樹中的一個翻轉后比較是否相同,而該思路則是省去翻轉的步驟,直接比較結構是否對稱,對稱點的值是否相等

例如,我們比較p、q兩樹的根節點是否存在且值相同,若不存在直接返回true,代表該樹對稱,因為根節點的左右子樹均為空;若存在且值相同,則繼續往下執行

此時我們調用的判斷相同樹的函數,唯一不同的一點是我們在該函數中傳參時傳的是p樹的左子樹和q樹的右子樹比較,以及p樹的右子樹和q樹的左子樹比較

如果p樹左子樹與q樹的右子樹相同,說明外側是對稱的

如果p樹右子樹和q樹的左子樹相同,說明內側是對稱的

因此,當p樹的左子樹和q樹的右子樹相同并且p樹的右子樹和q樹的左子樹也相同時,我們可以說該二叉樹是一棵對稱樹

代碼實現:在這里插入圖片描述

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isSameTree(struct TreeNode* p,struct TreeNode* q)
{if(p == NULL && q == NULL){return true;}else if(p == NULL){return false;}else if(q == NULL){return false;}else if(p->val != q->val){return false;}return isSameTree(p->left,q->right) && isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root) {return isSameTree(root->left,root->right);
}

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

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

相關文章

云原生可觀測-日志觀測(Loki)最佳實踐

一、Loki 簡介 云原生可觀測三大支柱 支柱工具用途MetricsPrometheus性能趨勢、系統負載LogsLoki原始事件記錄、錯誤診斷TracesTempo / Jaeger分布式鏈路追蹤 一、Loki 簡介 1.1 Loki 是什么 Loki 是由 Grafana Labs 開發的 日志聚合系統,與 Prometheus 架構一…

Windows Server 2003 R2系統C盤擴容教程

一、PAGreen軟件下載 下載地址: ExtPart.zip https://pan.baidu.com/s/1FxK61XNI0t-4JIEWK1QA8Q?pwd8888 提取碼: 8888 二、將軟件解壓縮 (1)、執行步驟一下載的程序 雙擊下圖所示可執行程序 (2)、選擇好解壓路徑,點擊「Unzip」進行解壓縮 (3)、磁…

Kubernetes配置管理

目錄什么是ConfigMap創建ConfigMap1:基于目錄創建ConfigMap1.創建conf目錄,放置文件2.基于目錄下的所有文件創建ConfigMap3.查看當前創建的ConfigMap2:基于文件創建ConfigMap1.單個文件創建ConfigMap2.使用帶有key的命令創建ConfigMap3.多個文…

golang怎么實現每秒100萬個請求(QPS),相關系統架構設計詳解

一.需求 使用Golang,以Gin框架為基礎,設計一個能夠處理每秒100萬請求(QPS 1M)的系統架構 注意:100萬QPS是一個很高的數字,單機通常難以處理,所以必須采用分布式架構,并且需要多層次的架構設計和優化 二.搭建步驟 1.系統架構設計 為了實現高并發,需要考慮以下幾個方面…

HCIA再復習

第一章.網絡基礎1.1 網絡類型分類網絡按照二層鏈路類型分為以下四種:多點接入網絡(MA):1,廣播型多點接入(BMA):如以太網,支持廣播,設備通過MAC地址通信&#…

Qt 數據庫連接池實現與管理

在 Qt 應用程序中,頻繁創建和銷毀數據庫連接會帶來顯著的性能開銷。數據庫連接池通過復用現有連接,避免重復創建和銷毀連接的開銷,從而提高應用程序的響應速度和吞吐量。本文將詳細介紹 Qt 中數據庫連接池的實現與管理方法。 一、數據庫連接池…

數據采集分析:從信息洪流中掘金的科學與藝術

——如何將原始數據轉化為商業決策的黃金?🌐 引言:我們正淹沒在數據的海洋,卻渴求著知識的甘泉每天全球產生 2.5萬億字節 數據(相當于每秒下載4.5萬部高清電影),但未經分析的數據如同未提煉的原…

Oracle國產化替代:一線DBA的技術決策突圍戰

從“如履薄冰”到“游刃有余”,中國數據庫的自主之路正重塑技術人的思維地圖。 “凌晨三點的最后一次數據校驗通過,割接系統綠燈全亮——**河北移動核心賬務系統的Oracle數據庫已被GoldenDB完全替代**。”2025年6月底,這場持續兩年的攻堅戰畫上句號。當全省業務流量平穩切…

OS19.【Linux】進程狀態(1)

目錄 1.情景引入 2.操作系統學科對進程狀態的分類 運行狀態 基于時間片的輪轉調度算法 阻塞狀態 等待IO設備的例子 等待其他進程中需要獲取的數據 進程喚醒 掛起狀態(全稱為阻塞掛起狀態) 簡單談談虛擬內存管理 就緒狀態 筆面試題 3.Linux對進程狀態的分類 R和S狀…

Hadoop小文件合并技術深度解析:HAR文件歸檔、存儲代價與索引結構

HDFS小文件問題的背景與挑戰在Hadoop分布式文件系統(HDFS)的設計哲學中,"大文件、流式訪問"是核心原則。然而現實場景中,海量小文件(通常指遠小于HDFS默認塊大小128MB的文件)的涌入卻成為系統性能…

Verilog 提取信號的上升沿或者下降沿

上升沿提取代碼&#xff1a;reg [1:0] F1;always (posedge clk)beginif(rst_n 1b0) F1[1:0]<2b00;else F1[1:0]<{F1[0],start_i};endwire start_l2h (F1[1:0]2b01)?1b1:1b0;下降沿提取代碼&#xff1a;reg [1:0] F1;always (posedge clk)b…

.Net core 部署到IIS出現500.19Internal Server Error 解決方法

.Net core 部署到IIS&#xff0c;網頁出現500.19Internal Server Error 解決方法解決方法 在URL:https://dotnet.microsoft.com/zh-tw/download/dotnet/8.0下載并安裝dotnet-hosting-8.0.18-win.exe 重啟IIS服務器

Linux 基本命令整理

&#x1f427; Linux 基本命令整理 為了方便初學者快速掌握 Linux 常用命令&#xff0c;以下是經過分類整理的核心命令及用法說明。 &#x1f4c2; 目錄操作與文件管理 pwd 核心功能&#xff1a;打印當前工作目錄的絕對路徑&#xff0c;明確用戶所在位置。 實操示例&#x…

牛客周賽 Round 101(題解的token計算, 76修地鐵 ,76選數,76構造,qcjj寄快遞,冪中冪plus)

A題解的token計算要記住c中的對數函數&#xff1a;log(n) 是自然對數&#xff08;以e為底&#xff09;ln(nlog10(n) 是以10為底的對log1p(n) 是ln(1n)&#xff0c;提供更高的數值精log2(n) 是以2為底的對logl(n) 和 log10l(n) 是long double版#define _CRT_SECURE_NO_WARNINGS …

商場導航軟件:3D+AI 基于Deepseek 模型的意圖識別技術解析

本文面向室內導航工程師、商場導航系統優化師及LBS 應用開發的技術員&#xff0c;解析商場室內導航系統 3DAI 三大核心技術模塊&#xff0c;并提供可直接復用的工程解決方案。如需獲取商場導航系統技術方案可前往文章最下方獲取&#xff0c;如有項目合作及技術交流歡迎私信作者…

借助Aspose.HTML控件,使用 Python 編程將網頁轉換為 PDF

使用 Python 將網頁轉換為 PDF 有時您需要離線訪問網頁&#xff0c;使其更易于訪問。因此&#xff0c;將HTML頁面轉換為PDF即可滿足您的需求。令人驚訝的是&#xff0c;您可以在幾秒鐘內在 Python 項目中啟用 HTML 到 PDF 的轉換。本指南將為 Python 開發人員介紹一個功能強大…

數據結構:找出字符串中重復的字符(Finding Duplicates in a String)——使用位運算

目錄 預備知識 左移運算&#xff08;<<&#xff09; 位運算 一、從最樸素的方法開始 二、如果只關心“有沒有出現過”&#xff0c;不關心“次數”&#xff0c;還能不能更省&#xff1f; 三、有沒有一種更“緊湊”的方式表示26個開關&#xff1f; 四、用一個整數的…

DevOps 完整實現指南:從理論到實踐

DevOps 是一種集軟件開發&#xff08;Dev&#xff09;與 IT 運維&#xff08;Ops&#xff09;于一體的文化、實踐和工具鏈&#xff0c;旨在通過自動化流程、持續集成/持續交付&#xff08;CI/CD&#xff09;、基礎設施即代碼&#xff08;IaC&#xff09;和跨團隊協作&#xff0…

使用 5 種安全解決方案將 Android 短信導出為PDF

想要將安卓手機短信導出為 PDF 格式&#xff0c;用于法律用途、情感表達或僅僅為了記錄&#xff1f;總之&#xff0c;您可以保存安卓手機短信并將其轉換為 PDF 格式&#xff0c;確保它們井然有序&#xff0c;方便打印。快來獲取解決方案吧&#xff01;第 1 部分&#xff1a;如何…

再談fpga開發(fpga開發的幾個差異)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】學習嵌入式的同學都知道&#xff0c;嵌入式一般分成這幾種chip&#xff0c;有51&#xff0c;有stm32 mcu&#xff0c;有soc&#xff0c;有dsp&#…