Leetcode 100. Same Tree

Borris發表於2020-02-12

題目:100. Same Tree

解法一 Recursion

思路

兩樹相同,則比較的兩個節點中不能有其中一個為 null,節點的值需要相等,兩個節點的左子樹和右子樹也要相等。

程式碼
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (q == null && p == null) return true;
        if (q == null || p == null) return false;
        if (q.val != p.val) return false;

        return isSameTree(q.left, p.left) && isSameTree(q.right, p.right);
    }
}
複雜度分析
  • 時間複雜度
    • 遍歷一遍二叉樹,花費 O(n) 時間
  • 空間複雜度
    • O(n) – Skewed Tree
    • O(logn) – Balanced Tree

解法二 Iteration

思路

和遞迴思路相同,就是使用了 queue 儲存兩個樹將要比較的節點。(用 stack 也可以)

程式碼
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(p);
        queue.offer(q);

        while (!queue.isEmpty()) {
            TreeNode ptree = queue.poll();
            TreeNode qtree = queue.poll();
            if (ptree == null && qtree == null) continue; // 當兩樹都是空樹時,繼續迴圈
            else if (ptree == null || qtree == null) return false;
            else if (ptree.val != qtree.val) return fasle;
            else {
                queue.offer(p.left);
                queue.offer(q.left);
                queue.offer(p.right);
                queue.offer(q.right);
            }
        }
        return true;
    }
}
複雜度分析
  • 時間複雜度
    • O(N)
  • 空間複雜度
    • O(N) Keep the queue
Takeaway

第101題 symmetric tree 思路相同,p,q樹都是 root,然後左子樹和右子樹比,右子樹和左子樹比。recursion時需要滿足根節點相等且左右對稱。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章