树与图简单1 种解法
#572另一棵树的子树
判断 subRoot 是否与 root 的某个节点为根的整棵子树完全相同。
#二叉树#深度优先搜索
解题主线
01
在 root 的每个候选节点上调用“相同的树”比较。
解法 1:枚举根并比较
当前节点匹配失败后,递归尝试左右子树作为候选根。
时间复杂度
O(nm) 最坏,n、m 分别为两棵树节点数
空间复杂度
O(h1 + h2) 最坏
java
import java.util.*;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if (subRoot == null) return true;
if (root == null) return false;
return same(root, subRoot)
|| isSubtree(root.left, subRoot)
|| isSubtree(root.right, subRoot);
}
private boolean same(TreeNode first, TreeNode second) {
if (first == null || second == null) return first == second;
return first.val == second.val
&& same(first.left, second.left)
&& same(first.right, second.right);
}
}当前节点匹配失败后,递归尝试左右子树作为候选根。
边界与易错点
- 匹配要求结构和值都相同,不是只包含目标节点序列。
- 约定空树是任意树的子树可让辅助方法语义完整。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
leetcode/src/main/java/tree/Q572_isSubTree.java