題目:
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 2Given tree t:
4 / \ 1 2Return 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 / 0Given tree t:
4 / \ 1 2Return 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
}
};