思路
先序遍历树 A,判断树 A 中的每个节点x 为根的子树是否包含树 B。
上面这句话包含两个步骤:
- 先序遍历树 A 的每个节点
- 判断以树 A 的每个节点为根节点的子树是否包含 树 B
解法:
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
}
// 判断 B 是否为树 A 的子树
boolean recur(TreeNode A, TreeNode B) {
// B 已经匹配完,说明 B 是
if(B == null) return true;
// 树 A 已经走完或者值不相等,则不是子树
if(A == null || A.val != B.val) return false
// 递归对比当前树的左子树和右子树
return recur(A.left, B.left) && recur(A.right, B.right);
}
}