树的子结构

题解方法

  • 递归

递归

  1. 递归判断 A 的当前节点是否包含 B。
  2. 分别递归遍历 A 的左右子树,过程中递归判断当前节点是否包含 B。

核心代码

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (B == null) {
return false;
}
return isContained(A, B) || (A != null && (isSubStructure(A.left, B) || isSubStructure(A.right, B)));
}

private boolean isContained(TreeNode A, TreeNode B) {
// B 遍历结束,说明 B 是 A 的子结构
if (B == null) {
return true;
}
if (A == null) {
return false;
}
if (A.val != B.val) {
return false;
}
return isContained(A.left, B.left) && isContained(A.right, B.right);
}

题目来源