【题目】
给定彼此独立的两棵树头结点分别为t1和t2,判断t1树是否包含t2树全部的拓扑结构。若包含,返回true
【代码】
//判断t1树是否包含t2树全部的拓扑结构
public static boolean contains(Node t1,Node t2){
if(t1==null||t2==null) return false;
//检查t1树的节点,若失败,再寻找t1的左右孩子是否与t2匹配
return check(t1,t2) || contains(t1.left,t2) || contains(t1.right,t2);
}
//挨个检查数的节点
private static boolean check(Node h, Node t2) {
if(t2==null){//t2遍历完了,说明已经匹配成功
return true;
}
if(h==null||h.value!=t2.value){//当前节点匹配失败
return false;
}
//再检查当前节点的左右孩子
return check(h.left,t2.left) && check(h.right,t2.right);
}