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