LeetCode 572 Subtree of Another Tree

題目:

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree scould also be considered as a subtree of itself.

Example 1:
Given tree s:

     3
    / \
   4   5
  / \
 1   2
Given tree t:
   4 
  / \
 1   2
Return true, because t has the same structure and node values with a subtree of s.

Example 2:
Given tree s:

     3
    / \
   4   5
  / \
 1   2
    /
   0
Given tree t:
   4
  / \
 1   2
Return false.

題目鏈接

題意:

給兩個非空的二叉樹s和t,編寫函數實現判斷t是否爲s的子樹。其中,s也可以是它自己的子樹。

先序遍歷二叉樹s,當判斷s當前結點的val和t的val相同,則進入判斷子樹的函數,同步遍歷s和t,看是否完全相同,假如不相同,則進行下一層遍歷。

代碼如下:

class Solution {
public:
    bool dfsSubtree(TreeNode* s, TreeNode * t) {  // 判斷兩個子樹是否完全相同
        if ((!s && t) || (s && !t)) return false;
        else if (!s && !t) return true;
        return s->val == t->val && dfsSubtree(s->left, t->left) && dfsSubtree(s->right, t->right);
    }
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if ((!s && t) || (s && !t)) return false;
        return ((s->val == t->val) && dfsSubtree(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t)); // 先序遍歷同時判斷s->val和t->val
    }
};


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