这个用递归是比较好实现的,但就是有一点点绕不过来。对比的时候,从第一个节点开始,如果root1.val==root2.val,那么就分别再去比较root1和root2的左右子树,直到root2==null(root1空不空无所谓)。如果root1.val!=root2.val,那再去比较root2是否是root1的左右子树(注意此时只要满足一种情况就行了,即root2是root1的左子树或者root1的左子树即可,不能用&&),代码如下:
//树的子结构
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if (root1==null||root2==null)
return false;
return resHasSubtree(root1,root2);
}
public boolean resHasSubtree(TreeNode root1,TreeNode root2){
//递归方法
if (root2==null){
return true;
}else {
if (root1==null)
return false;
}
//先判断根节点
if (root1.val==root2.val){
boolean res=resHasSubtree(root1.right,root2.right)&&resHasSubtree(root1.left,root2.left);
if (res)
return true;
else {
return resHasSubtree(root1.left,root2)||resHasSubtree(root1.right,root2);
}
}
return false;
}
京公网安备 11010502036488号