LeetCode 力扣 100. 相同的樹

題目描述(簡單難度)

判斷兩個二叉樹是否相同。

解法一

這道題就很簡單了,只要把兩個樹同時遍歷一下,遍歷過程中判斷數值是否相等或者同時爲 null 即可。而遍歷的方法,當然可以選擇 DFS 裏的先序遍歷,中序遍歷,後序遍歷,或者 BFS。

當然實現的話,可以用遞歸,用棧,或者中序遍歷提到的 Morris。也可以參照 98 題 94 題 ,對二叉樹的遍歷討論了很多。

這裏的話,由於最近幾題對中序遍歷用的多,所以就直接用中序遍歷了。

public boolean isSameTree(TreeNode p, TreeNode q) {
    return inorderTraversal(p,q);
}
private boolean inorderTraversal(TreeNode p, TreeNode q) {
    if(p==null&&q==null){
        return true;
    }else if(p==null || q==null){
        return false;
    }
    //考慮左子樹是否符合
    if(!inorderTraversal(p.left,q.left)){
        return false;
    }
    //考慮當前節點是否符合
    if(p.val!=q.val){
        return false;
    }
    //考慮右子樹是否符合
    if(!inorderTraversal(p.right,q.right)){
        return false;
    }
    return true;
}

時間複雜度:O(N)。對每個節點進行了訪問。

空間複雜度:O(h),h 是樹的高度,也就是壓棧所耗費的空間。當然 h 最小爲 log(N),最大就等於 N。

最好情況例子
      1
    /  \
   2    3
  / \  / \
 4  5 6   7
    
最差情況例子
     1
      \
       2
        \
         3
          \
           4

這道題比較簡單,本質上考察的就是二叉樹的遍歷。

更多詳細通俗題解詳見 leetcode.wang

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章