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

树的子结构

时间:2017-06-22 13:28:49      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:pen   script   down   title   split   节点   markdown   function   .text   

题目:
输入两棵树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);

    }

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

树的子结构

标签:pen   script   down   title   split   节点   markdown   function   .text   

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

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