zoukankan      html  css  js  c++  java
  • 【剑指offer】26.树的子结构

    26.树的子结构

    面试题26. 树的子结构

    难度中等37

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

    B是A的子结构, 即 A中有出现和B相同的结构和节点值。

    例如:

    给定的树 A:

    3 / 4 5 / 1 2

    给定的树 B:

    4 / 1

    返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。

    示例 1:

    输入:A = [1,2,3], B = [3,1]
    输出:false
    

    思路:

    //1.若A的根节点和B的根节点相同,则递归调用

    // a.终止条件 b == null 说明b遍历完毕 返回true

    // b.a == null a.val != b.val 说明a树遍历结束没有找到b的开始根节点

    // c.递归调用a的左节点和b的左节点 或者a的右节点 和 b的右节点

    //2.调用A的做节点和B子树比较 重复上述步骤

    //3.A的右节点和B子树比较 重复1

    时间复杂度:O(MN)

    空间复杂度:O(M)

    //1.若A的根节点和B的根节点相同,则递归调用 
        //  a.终止条件 b == null 说明b遍历完毕 返回true
        //  b.a == null a.val != b.val 说明a树遍历结束没有找到b的开始根节点
        //  c.递归调用a的左节点和b的左节点 或者a的右节点 和 b的右节点
        //2.调用A的做节点和B子树比较  重复上述步骤
        //3.A的右节点和B子树比较  重复1
        public boolean isSubStructure(TreeNode A, TreeNode B) {
            return (A != null && B != null ) && (recur(A,B) || isSubStructure(A.left,B) || isSubStructure(A.right,B));
        }
    
        private boolean recur(TreeNode a,TreeNode b){
            if(b == null) return true;
            if(a == null || a.val != b.val) return false;
            return recur(a.left,b.left) && recur(a.right,b.right);
        }
    
  • 相关阅读:
    那些年做过的外包 之 健康小屋
    Raize 重新编译
    解码淘口令?
    单品优惠券炸了
    如何共享联盟cookie
    阿里妈妈账号登录状态如何长时间保存
    delphi 图像旋转
    Canvas: Out of system resources
    关于&$地址传递的练习
    解决XAMPP中,MYSQL因修改my.ini后,无法启动的问题
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860649.html
Copyright © 2011-2022 走看看