LeetCode演算法題-Same Tree(Java實現)
阿新 • • 發佈:2018-11-05
這是悅樂書的第162次更新,第164篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第21題(順位題號是100)。給定兩個二叉樹,編寫一個函式來檢查它們是否相同。如果兩個二叉樹在結構上相同並且節點具有相同的值,則認為它們是相的。例如:
輸入: 1 1
/ \ / \
2 3 2 3
[1,2,3],[1,2,3]
輸出:true
輸入:1 1
/ \
2 2
[1,2],[1,null,2]
輸出:false
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 分析與解題
如果兩個二叉樹相同,那麼兩個二叉樹的節點值肯定都要相同。從根節點一直到最後一個子節點,出現一個不相同的值,那麼兩個二叉樹就不是相同的。當一個二叉樹從根節點、左子節點、右子節點依次向下延伸的時候,每次獲取到他們的值,然後再進行比較,如果相同,則繼續找下一點節點進行比較,直到所有節點比較完。
每次進入下一個迴圈判斷的時候,當前節點都是一個新的二叉樹,可能是根節點,也可能是擁有子節點,所以我們可以藉助遞迴的方法來解題。
public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null || q == null) { return p == q; } boolean f = p.val == q.val; boolean f2 = isSameTree(p.left, q.left); boolean f3 = isSameTree(p.right, q.right); return f && f2 && f3; }
03 小結
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!