另一個樹的子樹--遞歸判斷

0x01.問題

給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。

示例 :
給定的樹 s:(圖1)
給定的樹 t:(圖2)
返回 true,因爲 t 與 s 的一個子樹擁有相同的結構和節點值。

在這裏插入圖片描述
在這裏插入圖片描述

public boolean isSubtree(TreeNode s, TreeNode t)

0x02.簡要思路

  • 整體思路是DFS。
  • 如果在dfs時,匹配到s爲空,則返回false
  • 檢查當前匹配的s的節點與t是否相等。(包括對所有子樹的驗證,單獨列出一個check函數)。
  • 如果檢查不相等,則再去匹配s的左右子樹。

0x03.解決代碼–DFS

class Solution {
    private boolean check(TreeNode s, TreeNode t){
        if(s==null){
            return t==null;
        }
        if(t==null){
            return s==null;
        }
        if(s.val!=t.val){
            return false;
        }
        return check(s.left,t.left)&&check(s.right,t.right);
    }
    private boolean dfs(TreeNode s, TreeNode t){
        if(s==null){
            return false;
        }
        return check(s,t)||dfs(s.left,t)||dfs(s.right,t);
    }
    public boolean isSubtree(TreeNode s, TreeNode t) {
        return dfs(s,t);
    }
}

ATFWUS --Writing By 2020–05-07

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