剑指 Offer 26. 树的子结构
递归
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗:40.3 MB, 在所有 Java 提交中击败了29.98%的用户
public class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
return (A != null && B != null) && (
recursion(A, B) // A 与 B 的树根进行判断
|| isSubStructure(A.left, B) // A 的左子树与 B 进行对比
|| isSubStructure(A.right, B) // A 的右子树与 B 进行对比
);
}
// 此方法用于判断 B 是否为 A 的子树
public boolean recursion(TreeNode A, TreeNode B) {
// 如果 B 为空,说明递归到 B 的底了,B 为 A 的子树
if (B == null) return true;
// 如果 A 为空,此时 B 不为空,但是 A 为空,说明 B 不是 A 的子树
if (A == null) return false;
// 如果节点的值相等,则递归判断左右子树
if (A.val == B.val) {
return recursion(A.left, B.left) && recursion(A.right, B.right);
} else {
return false;
}
}
}