树的子结构

《剑指offer》刷题笔记。如有更好解法,欢迎留言。

关键字:二叉树 递归

题目描述:

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

思路:

  • 双递归:第一层递归判断二叉树A是否存在节点等于二叉树B的根。
  • 如果存在这样一个节点,那么对比A的子树与二叉树B。
  • 结束条件:当二叉树B全部节点被遍历完,A的子树还没遍历完,说明B是A的一部分,返回true,否则为false。
  • 完整代码
function compare(root1,root2){
    if(root2 === null) return true;
    if(root1 === null) return false;
    if(root1.val === root2.val){
        return compare(root1.left,root2.left)&&compare(root1.right,root2.right);
    }else{
        return false;
    }
}
function HasSubtree(pRoot1, pRoot2)
{
    if(pRoot1 === null || pRoot2 === null) return false;
    return compare(pRoot1,pRoot2) 
    ||  HasSubtree(pRoot1.left,pRoot2) || HasSubtree(pRoot1.right,pRoot2);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析: 首...
    夏臻Rock阅读 297评论 0 0
  • 本题是《剑指offer》第18题。 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 注意审题,子结构不是子树...
    packet阅读 174评论 0 0
  • 题目 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点的定义如下: 下图中的二棵二叉树,由于A中有一部分子...
    Longshihua阅读 203评论 0 1
  • 看见椅子老是想去折 看见比较尖的东西,老想往自己身上扎 被别人打了一下,就有捂肚子快点跑 有的时候脑子里总会有在修...
    陌某人阅读 281评论 3 3
  • 踏板操,即在踏板上随着动感音乐(每分钟120拍左右)有节奏地上下舞动,进行健美操的动作和步伐。它具有健美操的所有特...
    F_____阅读 180评论 0 0