首页 > 其他 > 详细

树的子结构

时间:2017-06-22 13:04:20      阅读:295      评论:0      收藏:0      [点我收藏+]

题目:
输入两棵树A和B。推断B是不是A的子结构
比如:右边的便是左边的子结构

           8                        4
         /   \                    /          4     9                  2    5
       /       2   5

二叉树我们非常easy会想到递归,这里我们的思路是:
先找到两棵二叉树同样的某一节点,然后依次递归深入,推断两棵树是否拥有共同的子结构就可以。

public static boolean hasSubtree(BinaryTree rootOne,BinaryTree rootTwo)
    {
        boolean result=false;
        if(rootOne!=null&&rootTwo!=null)
        {
            if(rootOne.value==rootTwo.value)
                result = HasSameTree(rootOne,rootTwo);
            if(!result)
                result = hasSubtree(rootOne.left,rootTwo);
            if(!result)
                result = hasSubtree(rootOne.right,rootTwo);
        }


        return result;
    }



    private static boolean HasSameTree(BinaryTree rootOne, BinaryTree rootTwo) {
         //假设是第二个为空,说明已经第二个遍历完成,则肯定是子结构
        if(rootTwo==null)return true;
        //在第二个还没有遍历完的时候第一个已经完了,那么肯定不是子结构
        if(rootOne==null)return false;
        if(rootOne.value != rootTwo.value)
            return false;

        return HasSameTree(rootOne.left,rootTwo.left)&&HasSameTree(rootOne.right,rootTwo.right);

    }

为了方便观看,我们能够输出二叉树的前序和中序遍历验证是否为子结构。

树的子结构

原文:http://www.cnblogs.com/liguangsunls/p/7064223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!