另一棵树的子树
2024年8月4日约 294 字小于 1 分钟
另一棵树的子树
题意
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
思路一
直接递归判断:
- 如果
subRoot为空,则和叶节点的空子节点匹配,返回true - 如果当前节点是空节点,无法与
subRoot匹配,返回false。 - 如果当前节点与
subRoot根节点相同,则递归往下判断,如果是相同的树,返回true。 - 否则,递归左右子树,看是否能找到匹配的,如果找到则返回
true。
代码:
class Solution {
boolean isSametree(TreeNode p, TreeNode q) {
if (p == null || q == null) return p == q;
return p.val == q.val
&& isSametree(p.left, q.left)
&& isSametree(p.right, q.right);
}
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if (subRoot == null) return true;
if (root == null) return false;
return isSametree(root, subRoot)
|| isSubtree(root.left, subRoot)
|| isSubtree(root.right, subRoot);
}
}思路二(优化)
只在高度相同时匹配
