您当前的位置: 首页 >  算法

Phil Arist

暂无认证

  • 1浏览

    0关注

    276博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

算法修炼17、树的子结构

Phil Arist 发布时间:2021-10-16 09:36:04 ,浏览量:1

题目描述:

  输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

  解题思路:

  要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步,在树A中找到和树B的根结点值一样的结点R;第二步,判断树A中以R为根结点的子树是不是包含和树B一样的结构。

  对于这两步,第一步实际上就是树的遍历,第二步是判断是否有相同的结构,这两步都可以通过递归来实现。

  举例:

  编程实现(Java):

   public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null || root2==null)
            return false;
        boolean res=false;
        if(root1.val==root2.val) //有相同的根节点,判断第二步
            res=doesTree1HasTree2(root1,root2);
        if(!res) //不满足,继续在子树中查找
            res=HasSubtree(root1.left,root2); //左子树
        if(!res) //左子树也没有找到,右子树查找
            res=HasSubtree(root1.right,root2); //右子树
        return res;
    }
    //以R为根的子树是否包含和树B相同的结构
    public boolean doesTree1HasTree2(TreeNode root1,TreeNode root2){ 
        if(root2==null)
            return true;
        if(root1==null)
            return false;
        if(root1.val!=root2.val)
            return false;
        return doesTree1HasTree2(root1.left,root2.left) && doesTree1HasTree2(root1.right,root2.right);
    }

关注
打赏
1662360869
查看更多评论
立即登录/注册

微信扫码登录

0.0378s