1. 程式人生 > >LeetCode演算法題-Same Tree(Java實現)

LeetCode演算法題-Same Tree(Java實現)

這是悅樂書的第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 小結

以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!