码迷,mamicode.com
首页 > 其他好文 > 详细

树的子结构

时间:2015-07-19 16:27:43      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:剑指offer

题目:
输入两棵树A和B,判断B是不是A的子结构
例如:右边的便是左边的子结构

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

二叉树我们很容易会想到递归,这里我们的思路是:
先找到两棵二叉树相同的某一节点,然后依次递归深入,判断两棵树是否拥有共同的子结构即可。

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);

    }

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

树的子结构

标签:剑指offer

原文地址:http://blog.csdn.net/u014307117/article/details/46955229

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!