LeetCode每日一題5月7日 LeetCode572.另一個數的子樹

問題描述:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/subtree-of-another-tree

示例 1:
給定的樹 s:

    3
    / \
   4   5
  / \
 1   2

給定的樹 t:

   4 
  / \
 1   2

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

示例 2:
給定的樹 s:

     3
    / \
   4   5
  / \
 1   2
    /
   0

給定的樹 t:

   4
  / \
 1   2

返回 false

解題思路:

看到樹,首先想到遞歸

這裏是判斷t是否爲s的子樹,就是判斷s中以每個節點爲根的樹是否於t相同,裏面必定包含一個判斷倆樹相等的函數:

如下:

   bool isSame(TreeNode* s, TreeNode* t){
        if(s==NULL && t==NULL){
            return true;
        }
        else if(s && t){
            if(s->val == t->val){
                return isSame(s->left,t->left)&&isSame(s->right,t->right);
            }else{
                return false;
            }
        }
        return false;   
    }

下面在依次判斷s中每個節點,完整代碼如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
   
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(s==NULL && t!=NULL) return false; 
        if(isSame(s,t)) return true;
        bool f1;
        bool f2; 
        f1 = isSubtree(s->left,t);
        f2 = isSubtree(s->right,t);
        return f1||f2;
    }
    bool isSame(TreeNode* s, TreeNode* t){
        if(s==NULL && t==NULL){
            return true;
        }
        else if(s && t){
            if(s->val == t->val){
                return isSame(s->left,t->left)&&isSame(s->right,t->right);
            }else{
                return false;
            }
        }
        return false;   
    }
};

 

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