以下是代码:
public class Solution {
//搜索头结点相同的方法
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean result=false;
//如果两个结点有一个已经遍历完了,那么返回false
if(root2!=null&&root1!=null){
//如果root1的值和root2的值相同,则result为判断其全等的结果
if(root1.val==root2.val)
{result=AllEqual(root1,root2);}
//如果这时result依旧不成立的话,那么说明没找到,继续在左孩子中找
if(!result)
{result=HasSubtree(root1.left,root2);}
//还没找到就在右孩子中找
if(!result)
{result=HasSubtree(root1.right,root2);}
}
return result;
}
//当头结点相同时,验证是否全结点相同
public static boolean AllEqual(TreeNode root1,TreeNode root2){
if(root2==null)//表示遍历完树2了
{
return true;
}
if(root1==null){//代表树一已经遍历完了但是树二还没有遍历完
return false;
}
//这一步特别说明一下:这里是简化写法,不易理解。
//事实上一共有三种情况:1)root1==null,root2==null 都遍历完了,说明相等 //2)root1!=null,root2=null 一没遍历完,二却没了,说明相等 3) root1==null,root2!=null
//一遍历完了,二却没有,说明不等
if(root1.val!=root2.val)
{
return false;
}
return AllEqual(root1.left,root2.left)&&AllEqual(root1.right,root2.right);
}
}
网友评论