package leetcode;
import java.util.LinkedList;
import java.util.Queue;
public class offer_26 {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(A==null||B==null) {return false;}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(A);
while(!queue.isEmpty()) {
TreeNode node=queue.poll();
//找出B树在A树中根节点相同的位置
if(node.val==B.val) {
if(compare(node, B)==true) {
return true;
}
}
if(node.left!=null) {
queue.add(node.left);
}
if(node.right!=null) {
queue.add(node.right);
}
}
return false;
}
public boolean compare(TreeNode A,TreeNode B) {
//B树递归至底都是相同的,则相同
if(B==null) {
return true;
}
//A树为空B树不为空,则不是相同的
if(A==null) {
return false;
}
//AB树节点值不相等也不同
if(A.val!=B.val) {
return false;
}
//同时递归左节点和右节点
return compare(A.left, B.left)&&compare(A.right, B.right);
}
}