首页 > 代码库 > 树的子结构
树的子结构
题目:
输入两棵树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);
}
为了方便观看,我们能够输出二叉树的前序和中序遍历验证是否为子结构。
树的子结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。