这个用递归是比较好实现的,但就是有一点点绕不过来。对比的时候,从第一个节点开始,如果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; }