思路:第一步判断a的值是否和b的根结点相等不,不相等比较a的左子树和b进行比较,不同在判断a的右子树与b进行比较,重复第一步迭代。第二步,当找到a的子树和b的根结点相同时,比较该子树的左右结点 是否和b的左右结点相同。
public class HasTree {
//是否包含
public static boolean hasSubTree(TreeNote root1,TreeNote root2){
boolean result=false;
if(root1!=null&&root2!=null){
if(root1.getValue()==root2.getValue()){
result=doseTree1HasTree2(root1, root2);
}
if(!result){
result= hasSubTree(root1.getLeftTreeNote(), root2);
}
if(!result){
result=hasSubTree(root1.getRighTreeNote(), root2);
}
}
return result;
}
//是否结构一致
public static boolean doseTree1HasTree2(TreeNote root1,TreeNote root2){
if(root2==null){
return true;
}
if(root1==null){
return false;
}
if(root1.getValue()!=root2.getValue()){
return false;
}
return doseTree1HasTree2(root1.getLeftTreeNote(), root2.getLeftTreeNote())&&doseTree1HasTree2(root1.getRighTreeNote(), root2.getRighTreeNote());
}
}