标签:剑指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