1.题目:
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树
1、T是S的子树:
2、T不是S的子树:
public class Main {
/*1.找到t的根节点在s中的位置
* 2.判断两颗二叉树是否相同
* */
public boolean isSubtree(TreeNode s,TreeNode t){
boolean flag = false;
//递归的出口条件
if(s != null){
if(s.val == t.val){
flag = isSameTree(s,t);
}
//此时s还未遍历完,仍未找到s中为t的根节点的值的节点
//递归的从子树中寻找
if(!flag){
flag = isSubtree(s.left,t) || isSubtree(s.right,t);
}
}
return flag;
}
//判断是否是相同树
public boolean isSameTree(TreeNode p,TreeNode q){
if(p == null && q == null){
return true;
}
if(p == null || q == null){
return false;
}
if(q.val != p.val){
return false;
}
//此时两棵树的根节点不为空且两棵树的根节点值相等
//此时去两棵树的子树中去比较
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}