树的子结构Java递归实现

树的子结构

http://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88

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

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务