输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
public static boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root2 == null || root1 == null) return false; //如果root2是空树、或者root2不是空树但是root1是空树,返回false
return HasSubtree2(root1, root2);
}
public static boolean HasSubtree2(TreeNode root1,TreeNode root2) {
if(root2 == null) return true; //如果root2到达叶子,说明这条递归暂时符合子结构
if(root1 == null) return false;//如果root1已经到达叶子而root2还没,返回true
if(root1.val == root2.val && HasSubtree2(root1.left, root2.left) && HasSubtree2(root1.right, root2.right)){
return true;
}
else return HasSubtree2(root1.left, root2) || HasSubtree2(root1.right, root2);
}