一.題目描述:
1.基本描述:
給定兩顆二叉樹,判斷兩顆二叉樹是否相等.
2.難度
入門
二.解題思路
1.題目分析
首先,先理解題目的需求.根據題目可知,入參為兩顆二叉樹的根節點TreeRoot,處理過程為判斷兩顆二叉樹是否相等(判斷依據為兩顆二叉樹的結構一致以及對應節點value值相等),返回參數為布爾類型(true或false);由上可知,該題目的核心在於如何去判斷兩顆樹的結構是否一致(解決:當前節點都為非空或都為空,左節點都為非空或都為空,右節點都為非空或都為空)
2.解決方案
(1)遞歸
此方案優點為實現簡單,缺點為執行效率慢.具體實現過程為:先判斷當前節點是否為空以及值是否相等;再獲取當前子節點的左節點,以左節點作為新的當前節點,再調用本身的方法進行像之前當前節點一樣的處理;再獲取當前子節點的右節點,以右節點作為新的當前節點,再調用本身的方法進行像之前當前節點一樣的處理;只要過程發現值不同的或是一個為空另一個為非空的,最終返回false,如果最終跑完了這個過程,即為true.
(2)循環
此方案優點為執行效率快,缺點為耗費了額外的空間以及實現相對遞歸方案難了一些.具體實現過程為:分別為兩顆二叉樹創建兩個棧,然后把根節點分別放進去,寫一個循環;先把棧頂元素取出來,然后比較兩個節點,然后再分別把當前節點的左節點和右節點存入棧中,重新執行循環體,這樣就可以比較到對應的每個節點.只有處理過程發現比較不同,最終返回false和break即可.如果跑完了循環,再去比較兩個棧是否都為空,如果有一個不為空,表明這兩顆二叉樹結構不同,返回false,如果都為空,即兩顆二叉樹相等,返回true
三.參考答案
1.遞歸
2.循環
四.總結
這個題目乍一看,覺得挺簡單的,的確是入門題目.但是真正去編碼實現時,又不會很順利,說到底還是缺少練習.總的來說一句話,真正的編程能力是練出來的,不是看出來的,一定要堅持多練多反思多總結.