您的位置:首页 > Web前端

剑指offer系列之16:树的子结构

2016-04-11 20:08 459 查看
题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。

思路:要查找A中是不是含有和B一样的子树,可以分成两步,第一部在A中找到和B的根节点的值一样的节点R,第二步在判断以R为根节点的子树是不是包含和B一样的结构。第一部在二叉树中查找与根节点的值一样的节点,实际上就是树的遍历,可以用递归的方法来遍历,

public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean result = false;
if(root1 != null && root2 != null){
if(root1.val == root2.val){
result = doesTree1HasTree2(root1,root2);
}
if(!result){
result = HasSubtree(root1.left,root2);
}
if(!result){
result = HasSubtree(root1.right,root2);
}
}
return result;
}


递归调用HasSubtree函数,如果发现某一节点的值和树B的根节点的值相同,则调用DoesTree1HaveTree2函数做第二步判断。第二步判断也是使用递归,递归的终止条件是到达了树A或者树B的叶结点。

private boolean doesTree1HasTree2(TreeNode root1,TreeNode root2){
if(root2 == null){
return true;
}
if(root1 == null){
return false;
}
if(root1.val != root2.val){
return false;
}
return doesTree1HasTree2(root1.left,root2.left) && doesTree1HasTree2(root1.right,root2.right);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: