• 【剑指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);
        }
    
  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860649.html
Copyright © 2020-2023  润新知