/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/publicclassSolution{publicbooleanHasSubtree(TreeNode root1,TreeNode root2){boolean result =false;if(root1 != null && root2 != null){//如果root节点相同if(root1.val == root2.val){//判断左右子节点是否相同
result =DoesTree1HasTree2(root1,root2);}//如果当前层没有找到与B相同的子结构,则继续递归左右子树中寻找if(!result){
result =HasSubtree(root1.left,root2);//左子树寻找相同的根节点}if(!result){
result =HasSubtree(root1.right,root2);//右子树寻找相同的根节点}}return result;}publicbooleanDoesTree1HasTree2(TreeNode root1,TreeNode root2){if(root2 == null)returntrue;//递归终止条件,B已经到达叶子节点了,说明已经匹配成功!if(root1 == null)returnfalse;if(root1.val != root2.val)returnfalse;returnDoesTree1HasTree2(root1.left,root2.left)&&DoesTree1HasTree2(root1.right,root2.right);}}