572. 另一個樹的子樹
難度簡單
給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。
示例 1:
給定的樹 s:
給定的樹 t:
傳回 true,因為 t 與 s 的一個子樹擁有相同的結構和節點值。
示例 2:
給定的樹 s:
給定的樹 t:
傳回 false。
思路1.0:
類比對二叉樹套路
兩層周遊,第一層在樹S中找到樹t的根,第二層判斷上一步找到的節點是否和樹t比對
周遊順序:兩者相同
周遊判斷是否存在子樹的條件:
1)值相等
2)S == NULL && T == NULL,true
3)S == NULL || T == NULL,false
代碼1.0(已完成):
class Solution {
public:
bool isMatching(TreeNode* S, TreeNode* T)
{
if (S == NULL && T == NULL) return true;
if (S == NULL || T == NULL) return false;
return S->val == T->val && isMatching(S->left, T->left) && isMatching(S->right, T->right);
}
bool isSubtree(TreeNode* s, TreeNode* t) {
if (s == NULL || t == NULL) return false;
return isMatching(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t);
}
};