解题思路:
1.如果根节点为空,那么返回false;
2.如果根节点相同,那么我们需要判断这2棵树是否相同,我们可以借助上面写的isSameTree方法去判断,如果相同,则subRoot是root的子树;
3.如果根节点不相同,我们需要在左子树或者右子树去找是否有和subRoot相同的树;
代码:
publicbooleanisSubtree(TreeNoderoot, TreeNodesubRoot) { if(root==null||subRoot==null){ returnfalse; } //判断2棵树是否相同if(isSameTree(root,subRoot)){ returntrue; } //判断左子树是否有subRootif(isSubtree(root.left,subRoot)){ returntrue; } //判断右子树是否有subRootif(isSubtree(root.right,subRoot)){ returntrue; } returnfalse; } publicbooleanisSameTree(TreeNodep, TreeNodeq) { //如果p,q都为空,那么这2个树一定相同if (p==null&&q==null) { returntrue; } //如果q为空,p不为空,那么一定不相同if (p!=null&&q==null) { returnfalse; } //如果p为空,q不为空,那么一定不相同if (p==null&&q!=null) { returnfalse; } //如果p,q都不为空,那么要判断值,如果值不相同,那么一定不相同if (p.val!=q.val) { returnfalse; } //如果p,q都不为空,并且p,q的值相同,那么要判断p,q的左右子树的值,如果相同为真,反之;returnisSameTree(p.left, q.left) &&isSameTree(p.right, q.right); }