public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean flag=false;
if(root1!=null&&root2!=null){
if(root1.val==root2.val) flag=Dosesame(root1,root2);//对当前节点执行匹配
if(!flag)flag=HasSubtree(root1.left,root2);//当前节点匹配失败 更新root1节点到左子节点
if(!flag)flag=HasSubtree(root1.right,root2);//左子节点也不成功时 进入右子节点
}
return flag;
}
public boolean Dosesame(TreeNode root1,TreeNode root2){
if(root1==null&&root2!=null)return false; //只匹配了一部分
if(root2==null)return true; //匹配完成
if(root1.val!=root2.val)return false;//匹配过程中 任何地方发生 匹配都失败
return Dosesame(root1.left,root2.left)&&Dosesame(root1.right,root2.right);//当前节点值相等 再递归同时匹配左右节点
}
}