領扣(LeetCode)對稱二叉樹 個人題解

給定一個二叉樹,檢查它是否是鏡像對稱的。

例如,二叉樹?[1,2,2,3,4,4,3]?是對稱的。

    1/ \2   2/ \ / \
3  4 4  3

但是下面這個?[1,2,2,null,3,null,3]?則不是鏡像對稱的:

    1/ \2   2\   \3    3

說明:

如果你可以運用遞歸和迭代兩種方法解決這個問題,會很加分。

?

(算法萌新,輕拍求指點 XD 此題思路參考了官方題解。)

由于是很久沒有接觸這種類型的題目了,所以第一次拿到有點懵。還是看了題解才找回感覺。
看這個二叉樹是不是對稱的,主要是看二叉樹左邊和右邊的節點是不是各自相反。每一層都是左右顛倒。
所以通過遞歸,判斷左樹和右樹相反的節點的值是不是相同。
如果兩邊都為空,正常退出,說明遞歸到樹的底部了。
如果有一邊空了另外一半沒空,說明有一邊的節點沒了,另外一半還在,肯定不是對稱的樹
如果兩邊對稱,繼續遞歸節點的左右節點,直到遞歸完全或者發現不對稱。
代碼如下:
遞歸:

 1 class Solution {
 2     public boolean isSymmetric(TreeNode root) {
 3         return isMirror(root, root);
 4     }
 5 
 6     boolean isMirror(TreeNode t1, TreeNode t2) 
 7     {
 8         if (t1 == null && t2 == null)
 9             return true;
10         if(t1 == null ||t2==null)
11             return false;
12         if(t1.val==t2.val)
13         {
14             return true && isMirror(t1.right, t2.left) && isMirror(t1.left, t2.right);
15         }
16         return false;
17     }
18 
19 }

?

第二種方法是迭代,雖然知道做法和用意,但是在使用上不夠熟練。大概思路就是把待處理的節點入隊,然后依次出隊處理,獲取新的待處理節點入隊。
在處理時出現了一個問題,在迭代時遇到兩個都為空的節點不能直接退出循環,雖然可能是二叉樹的底部,但是因為這時隊列里可能還有其他未處理的節點等待處理,不能直接返回。
代碼如下:
迭代:

 1 class Solution {
 2     
 3     
 4     public boolean isSymmetric(TreeNode root)
 5     {
 6         Queue<TreeNode> queue=new LinkedList<TreeNode>();
 7         queue.add(root);
 8         queue.add(root);
 9         while(!queue.isEmpty())
10         {
11             TreeNode t1=queue.poll();
12             TreeNode t2=queue.poll();
13             if(t1==null && t2==null)
14                 continue;
15             if(t1==null || t2==null)
16             {
17                 return false;
18             }
19             if(t1.val!=t2.val)
20                 return false;
21             queue.add(t1.left);
22             queue.add(t2.right);
23             queue.add(t1.right);
24             queue.add(t2.left);
25             
26         }
27         return true;
28     }
29 }

?

轉載于:https://www.cnblogs.com/axiangcoding/p/9879329.html

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

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

相關文章

python 開發api_使用FastAPI和Python快速開發高性能API

python 開發apiIf you have read some of my previous Python articles, you know I’m a Flask fan. It is my go-to for building APIs in Python. However, recently I started to hear a lot about a new API framework for Python called FastAPI. After building some AP…

Purley平臺Linpak測試,從踏坑開始一步步優化

Purley平臺Linpak測試&#xff0c;從踏坑開始一步步優化 #記2017年11月第一次踏坑事件 測試平臺配置&#xff1a; 6nodes CPU: Intel Gold 6132 2.6GHz 14C RAM: 8G *12 2666MHz NET: Infiband FDR OS: centos7.2 mpi: Intel-mpi hpl: xhpl.intel 開始踏第一坑 現象&#xff1a…

基于easyui開發Web版Activiti流程定制器詳解(一)——目錄結構

&#xfeff;&#xfeff;題外話&#xff08;可略過&#xff09;&#xff1a; 前一段時間&#xff08;要是沒記錯的話應該是3個月以前&#xff09;發布了一個更新版本&#xff0c;很多人說沒有文檔看著比較困難&#xff0c;所以打算拿點時間出來詳細給大家講解一下&#xff0c;…

HDOJ 2037:今年暑假不AC_大二寫

AC代碼&#xff1a; #include <iostream> #include <cstdio> #include <algorithm> #define Max 105 using namespace std;struct TimeList {int start;int end; }timelist[Max]; bool compare(TimeList a, TimeList b) {if(a.end b.end)return a.start &l…

基于easyui開發Web版Activiti流程定制器詳解(二)——文件列表

&#xfeff;&#xfeff;上一篇我們介紹了目錄結構&#xff0c;這篇給大家整理一個文件列表以及詳細說明&#xff0c;方便大家查找文件。 由于設計器文件主要保存在wf/designer和js/designer目錄下&#xff0c;所以主要針對這兩個目錄進行詳細說明。 wf/designer目錄文件詳解…

杭電oj2047-2049、2051-2053、2056、2058

2047 阿牛的EOF牛肉串 1 #include<stdio.h>2 3 int main(){4 int n,i;5 _int64 s[51];6 while(~scanf("%d",&n)){7 s[1]3;s[2]8;8 for(i3;i<n;i){9 s[i] s[i-1]*2 s[i-2]*2; 10 } 11 print…

Power BI:M與DAX以及度量與計算列

When I embarked on my Power BI journey I was almost immediately slapped with an onslaught of foreign and perplexing terms that all seemed to do similar, but somehow different, things.當我開始Power BI之旅時&#xff0c;我幾乎立刻受到了外國和困惑術語的沖擊&am…

git 基本命令和操作

設置全局用戶名密碼 $ git config --global user.name runoob $ git config --global user.email testrunoob.comgit init:初始化倉庫 創建新的 Git 倉庫 git clone: 拷貝一個 Git 倉庫到本地 : git clone [url]git add:將新增的文件添加到緩存 : git add test.htmlgit status …

基于easyui開發Web版Activiti流程定制器詳解(三)——頁面結構(上)

&#xfeff;&#xfeff;上一篇介紹了定制器相關的文件&#xff0c;這篇我們來看看整個定制器的界面部分&#xff0c;了解了頁面結構有助于更好的理解定制器的實現&#xff0c;那么現在開始吧&#xff01; 首先&#xff0c;我們來看看整體的結構&#xff1a; 整體結構比較簡單…

bzoj 4300 絕世好題 —— 思路

題目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id4300 記錄一下 mx[j] 表示以第 j 位上是1的元素結尾的子序列長度最大值&#xff0c;轉移即可。 代碼如下&#xff1a; #include<iostream> #include<cstdio> #include<cstring> #include&…

基于easyui開發Web版Activiti流程定制器詳解(四)——頁面結構(下)

&#xfeff;&#xfeff;題外話&#xff1a; 這兩天周末在家陪老婆和兒子沒上來更新請大家見諒&#xff01;上一篇介紹了調色板和畫布區的頁面結構&#xff0c;這篇講解一下屬性區的結構也是定制器最重要的一個頁面。 屬性區整體頁面結構如圖&#xff1a; 在這個區域可以定義工…

梯度下降法優化目標函數_如何通過3個簡單的步驟區分梯度下降目標函數

梯度下降法優化目標函數Nowadays we can learn about domains that were usually reserved for academic communities. From Artificial Intelligence to Quantum Physics, we can browse an enormous amount of information available on the Internet and benefit from it.如…

FFmpeg 是如何實現多態的?

2019獨角獸企業重金招聘Python工程師標準>>> 前言 眾所周知&#xff0c;FFmpeg 在解碼的時候&#xff0c;無論輸入文件是 MP4 文件還是 FLV 文件&#xff0c;或者其它文件格式&#xff0c;都能正確解封裝、解碼&#xff0c;而代碼不需要針對不同的格式做出任何改變&…

基于easyui開發Web版Activiti流程定制器詳解(五)——Draw2d詳解(一)

&#xfeff;&#xfeff;背景&#xff1a; 小弟工作已有十年有余&#xff0c;期間接觸了不少工作流產品&#xff0c;個人比較喜歡的還是JBPM&#xff0c;因為出自名門Jboss所以備受推崇&#xff0c;但是現在JBPM版本已經與自己當年使用的版本&#xff08;3.X&#xff09;大相徑…

Asp.net MVC模型數據驗證擴展ValidationAttribute

在Asp.Mvc項目中有自帶的一套完整的數據驗證功能&#xff0c;客戶端可以用HtmlHelper工具類&#xff0c;服務端可以用ModelState進行驗證。而他們都需要System.ComponentModel.DataAnnotations類庫中的特性功能&#xff0c;通過在屬性上方添加特性就可以達到驗證前后端驗證數據…

seaborn 子圖_Seaborn FacetGrid:進一步完善子圖

seaborn 子圖Data visualizations are essential in data analysis. The famous saying “one picture is worth a thousand words” holds true in the scope of data visualizations as well. In this post, I will explain a well-structured, very informative collection …

基于easyui開發Web版Activiti流程定制器詳解(六)——Draw2d的擴展(一)

&#xfeff;&#xfeff;題外話&#xff1a; 最近在忙公司的云項目空閑時間不是很多&#xff0c;所以很久沒來更新&#xff0c;今天補上一篇&#xff01; 回顧&#xff1a; 前幾篇介紹了一下設計器的界面和Draw2d基礎知識&#xff0c;這篇講解一下本設計器如何擴展Draw2d。 進…

深度學習網絡總結

1.Siamese network Siamese [sai? mi:z] 孿生 左圖的孿生網絡是指兩個網絡通過共享權值實現對輸入的輸出&#xff0c;右圖的偽孿生網絡則不共享權值(pseudo-siamese network)。 孿生神經網絡是用來衡量兩個輸入的相似度&#xff0c;可以用來人臉驗證、語義相似度分析、QA匹配…

異常檢測時間序列_時間序列的無監督異常檢測

異常檢測時間序列To understand the normal behaviour of any flow on time axis and detect anomaly situations is one of the prominent fields in data driven studies. These studies are mostly conducted in unsupervised manner, since labelling the data in real lif…

python設計模式(七):組合模式

組合&#xff0c;將對象組合成樹狀結構&#xff0c;來表示業務邏輯上的[部分-整體]層次&#xff0c;這種組合使單個對象和組合對象的使用方法一樣。 如描述一家公司的層次結構&#xff0c;那么我們用辦公室來表示節點&#xff0c;則總經理辦公司是根節點&#xff0c;下面分別由…