如何判斷兩顆二叉樹是否相等


一.題目描述:

1.基本描述:

      給定兩顆二叉樹,判斷兩顆二叉樹是否相等.

2.難度

      入門

 

二.解題思路

1.題目分析

      首先,先理解題目的需求.根據題目可知,入參為兩顆二叉樹的根節點TreeRoot,處理過程為判斷兩顆二叉樹是否相等(判斷依據為兩顆二叉樹的結構一致以及對應節點value值相等),返回參數為布爾類型(true或false);由上可知,該題目的核心在於如何去判斷兩顆樹的結構是否一致(解決:當前節點都為非空或都為空,左節點都為非空或都為空,右節點都為非空或都為空)

2.解決方案

(1)遞歸

      此方案優點為實現簡單,缺點為執行效率慢.具體實現過程為:先判斷當前節點是否為空以及值是否相等;再獲取當前子節點的左節點,以左節點作為新的當前節點,再調用本身的方法進行像之前當前節點一樣的處理;再獲取當前子節點的右節點,以右節點作為新的當前節點,再調用本身的方法進行像之前當前節點一樣的處理;只要過程發現值不同的或是一個為空另一個為非空的,最終返回false,如果最終跑完了這個過程,即為true.

(2)循環

      此方案優點為執行效率快,缺點為耗費了額外的空間以及實現相對遞歸方案難了一些.具體實現過程為:分別為兩顆二叉樹創建兩個棧,然后把根節點分別放進去,寫一個循環;先把棧頂元素取出來,然后比較兩個節點,然后再分別把當前節點的左節點和右節點存入棧中,重新執行循環體,這樣就可以比較到對應的每個節點.只有處理過程發現比較不同,最終返回false和break即可.如果跑完了循環,再去比較兩個棧是否都為空,如果有一個不為空,表明這兩顆二叉樹結構不同,返回false,如果都為空,即兩顆二叉樹相等,返回true

 

三.參考答案

1.遞歸

 

 

2.循環

 

 

四.總結

        這個題目乍一看,覺得挺簡單的,的確是入門題目.但是真正去編碼實現時,又不會很順利,說到底還是缺少練習.總的來說一句話,真正的編程能力是練出來的,不是看出來的,一定要堅持多練多反思多總結.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM