本文最后更新于:2021年2月11日 晚上
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
示例 1:
给定的树 s:
给定的树 t:
返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
示例 2:
给定的树 s:
给定的树 t:
返回 false。
Solution
其他类似题目 [101 对称二叉树]、[100 相同的树]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
class Solution { public: bool isSubtree(TreeNode* s, TreeNode* t) { if (!s && !t) return true; if (s == nullptr || t == nullptr) return false; return isSameTree(s, t) || isSubtree(s->left, t) || isSubtree(s->right, t); } private: bool isSameTree(TreeNode* p1, TreeNode* p2) { if (p1 == nullptr && p2 == nullptr) return true; if (p1 == nullptr || p2 == nullptr) return false; if (p1->val != p2->val) return false; return isSameTree(p1->left, p2->left) && isSameTree(p1->right, p2->right); } };
|