/**
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){//找到了Tree1中对应Tree2的根节点的点if(root1.val==root2.val){//以这个根节点为为起点判断Tree1是否包含Tree2
result =doesTree1HasTree2(root1,root2);}//没找到则在左子树中找if(!result){
result =HasSubtree(root1.left,root2);}//仍没找到则在右子树中找if(!result){
result =HasSubtree(root1.right,root2);}}return result;}publicbooleandoesTree1HasTree2(TreeNode node1,TreeNode node2){//递归结束条件:达到了树A或者树B的叶节点//root2为null,说明B已经遍历完,返回trueif(node2==null){returntrue;}//root2不为null,root1为null,即在B没遍历完时A已经遍历完,返回falseif(node1==null){returnfalse;}//当前两节点值不相等说明不匹配返回falseif(node1.val!=node2.val){returnfalse;}returndoesTree1HasTree2(node1.left,node2.left)&&doesTree1HasTree2(node1.right,node2.right);}}