天天看點

PigyChan_LeetCode 572. 另一個樹的子樹

572. 另一個樹的子樹

難度簡單

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

示例 1:

給定的樹 s:

PigyChan_LeetCode 572. 另一個樹的子樹

給定的樹 t:

PigyChan_LeetCode 572. 另一個樹的子樹

傳回 true,因為 t 與 s 的一個子樹擁有相同的結構和節點值。

示例 2:

給定的樹 s:

PigyChan_LeetCode 572. 另一個樹的子樹

給定的樹 t:

PigyChan_LeetCode 572. 另一個樹的子樹

傳回 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);
      }
  };