package offer;
import java.sql.ResultSet;
/**
* offer interview 18
*/
public class Test18 {
public static class BinaryTreeNode{
int value;
BinaryTreeNode left;
BinaryTreeNode right;
public BinaryTreeNode(){}
public BinaryTreeNode(int value){
this.value =value;
this.left = null;
this.right = null;
}
}
public static boolean hasSubtree(BinaryTreeNode root1,BinaryTreeNode root2){
if (root1 == root2){
return true;
}
if (root2 == null){
return true;
}
if (root1 == null){
return false;
}
boolean result = false;
if (root1.value == root2.value){
result = match(root1,root2);
}
if (result){
return true;
}
return hasSubtree(root1.left,root2) || hasSubtree(root1.right,root2);
}
public static boolean match(BinaryTreeNode root1,BinaryTreeNode root2){
if (root1 == root2){
return true;
}
if (root2 == null){
return true;
}
if (root1 == null){
return false;
}
if (root1.value == root2.value){
return match(root1.left,root2.left) && match(root1.right,root2.right);
}
return false;
}
public static void main(String[] args){
BinaryTreeNode root1 = new BinaryTreeNode(8);
root1.right = new BinaryTreeNode(7);
root1.left = new BinaryTreeNode(8);
root1.left.left = new BinaryTreeNode(9);
root1.left.right = new BinaryTreeNode(2);
root1.left.right.left = new BinaryTreeNode(4);
root1.left.right.right = new BinaryTreeNode(7);
BinaryTreeNode root2 = new BinaryTreeNode(8);
root2.left = new BinaryTreeNode(9);
root2.right = new BinaryTreeNode(2);
System.out.println(hasSubtree(root1,root2));
System.out.println(hasSubtree(root2,root1));
System.out.println(hasSubtree(root1,root1.left));
System.out.println(hasSubtree(root1,null));
System.out.println(hasSubtree(null,root2));
System.out.println(hasSubtree(null,null));
}
}