package sort;
class BinayTreeNode {
int value;
BinayTreeNode left;
BinayTreeNode right;
public BinayTreeNode(int value, BinayTreeNode left, BinayTreeNode right) {
// TODO Auto-generated constructor stub
this.right = right;
this.left = left;
this.value = value;
}
}
public class Test26 {
public static void main(String[] args) {
int deepth = 3;
BinayTreeNode root = new BinayTreeNode(1, null, null);
makeTree(root, deepth); // 使用该方法生成一颗二叉树
BinayTreeNode root1 = new BinayTreeNode(2, null, null);// 人为生成一颗小的二叉树
root1.left = new BinayTreeNode(4, null, null);
root1.right = new BinayTreeNode(5, null, null);
System.out.println(AhasB(root, root1));
}
private static boolean AhasB(BinayTreeNode A, BinayTreeNode B) {
if (A != null) { // 递归入口
if (A.value == B.value) {// 如果根节点相同,这进入insideEqual方法逐个节点比较
if (insideEqual(A, B)) {
return true;
}
} else {
return AhasB(A.left, B) || AhasB(A.right, B);//根节点不相同,则分别用左节点和右节点进行比较
}
}
return false;
}
private static boolean insideEqual(BinayTreeNode a, BinayTreeNode b) {
if (b == null) // 递归出口表示匹配成功
return true;
if (a == null)
return false;// 递归出口表示匹配失败
if (a.value != b.value) {// 如果该节点不一样 ,这不需要向下比较
return false;
}
return insideEqual(a.left, b.left) && insideEqual(a.right, b.right);// 俩子树必须都相同
}
private static void makeTree(BinayTreeNode node, int deep) {
// TODO Auto-generated method stub
if (deep > 0) {
node.left = new BinayTreeNode(node.value * 2, null, null);
node.right = new BinayTreeNode(node.value * 2 + 1, null, null);
makeTree(node.left, deep - 1);
makeTree(node.right, deep - 1);
}
}
}