LCR 143. 子结构判断
给定两棵二叉树 tree1 和 tree2,判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。
注意,空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。
示例 1:
**输入:**tree1 = [1,7,5], tree2 = [6,1]
**输出:**false
**解释:**tree2 与 tree1 的一个子树没有相同的结构和节点值。
示例 2:
**输入:**tree1 = [3,6,7,1,8], tree2 = [6,1]
**输出:**true
**解释:**tree2 与 tree1 的一个子树拥有相同的结构和节点值。即 6 - > 1。
提示:
0 <= 节点个数 <= 10000
判断一个树是不是另一个树的子结构,假设是的,且根节点为A和B
则可以通过递归check判断
A->val==B->val&&check(A->left, B->left) && check(A->right, B->right);为true
如果根节点对应的不是A的根节点,则我们可以分别判断A的左右子树可不可以作为根节点
即isSubStructure(A->left, B) || isSubStructure(A->right, B);
综上就是遍历A树中的每个根节点,看其能不能作为子结构的根节点
然后注意nullptr的情况:
对于isSubStructure(),题目要求A、B中任何一方为空直接返回false
对于check(),如果B为nullptr则说明B遍历完了返回true,
如果A为nullptr,B不为,则说明B还没遍历完,A已经结束了,返回false
1 | class Solution { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.






