100. Same Tree

Borris發表於2019-10-07

解法一

思路

直觀地判斷是否是相同的樹:如果兩個樹的同位置節點不相等,返回false。如果兩者有一個為 Null,返回 false。如果都為 null, 返回 true。

程式碼
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
            if (p == null && q == null) return true;
            if (p != null || q != null) return false;
            if (p.val != q.val) return false;
            return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}
複雜度分析
  • 時間複雜度 O(N) 每個節點都會經過
  • 空間複雜度
    • 最好情況 O(logN) 完全平衡二叉樹
    • 最壞情況 O(N) 所有數都在 left subtree

解法二

思路

通過入隊出隊操作,將兩個樹的同位置元素進行比較。

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

                queue.add(p);
                queue.add(q);

                while (!queue.isEmpty()) {
                        TreeNode ptree = queue.poll();
                        TreeNode qtree = queue.poll();
                        if (ptree == null && qtree == null) continue;
                        if (ptree == null || qtree == null || ptree.val != qtree.val) return false;
                        queue.add(ptree.left);
                        queue.add(qtree.left);
                        queue.add(ptree.right);
                        queue.add(qtree.right);
                }
                return true;
        }
}
複雜度分析
  • 時間複雜度 O(N)
  • 空間複雜度 O(N) (因為會把所有元素儲存在裡面?)

Takeaway

  • 先序遍歷,中序遍歷,後序遍歷

相關文章