题目链接: 树的子结构
题解:
1,如果子结构在左子树 返回true
2,如果子结构在右子树 返回true
3,如果左右子树都不存在子结构,判断包含当前节点是否存在子结构.
4,包含当前节点存在子结构的条件为对B进行遍历,B中的不为空元素都在对应的A中.
代码注意点:
dfs 递归出口判断: b为空 则一定为true(原来的树不为空)
a 为空 一定为 false 因为之前已经判断 b是否为空.
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(B==null||A==null) return false;
if(isSubStructure(A.left,B)||isSubStructure(A.right,B)) return true;
return dfs(B,A);
}
private boolean dfs(TreeNode b, TreeNode a) {
if(b==null) return true;
if(a==null) return false;
return b.val==a.val&&dfs(b.left,a.left)&&dfs(b.right,a.right);
}
}