zoukankan      html  css  js  c++  java
  • 【剑指Offer】面试题26. 树的子结构

    题目

    输入两棵二叉树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
    

    示例 2:

    输入:A = [3,4,5,1,2], B = [4,1]
    输出:true
    

    限制:0 <= 节点个数 <= 10000

    思路

    如果A 和 B 当前节点值相等,则判断 B 节点的子树是否是 A 节点子树的子结构,即各个节点值相等(注意: 此时B的子树中的空节点为A的子结构)
    如果不是,则递归判断 B 是否是 A 的左节点的子结构;
    如果不是,则递归判断 B 是否是 A 的右节点的子结构;

    代码

    时间复杂度:O(n)
    空间复杂度:O(1)

    class Solution {
    public:
        bool isSubStructure(TreeNode* A, TreeNode* B) {
            if (!A || !B) return false;
            bool res = false;
            if (A->val == B->val) res = helper(A, B);
            if (!res) res = isSubStructure(A->left, B);
            if (!res) res = isSubStructure(A->right, B);
            return res;
        }
    
        bool helper(TreeNode *A, TreeNode *B) {
            if (!B) return true;  // B为空为A的子结构,直接返回true
            if (!A || A->val != B->val) return false;  // B不为空A为空 或 两者值不相等
            return helper(A->left, B->left) && helper(A->right, B->right);
        }
    };
    
  • 相关阅读:
    npm中package-lock.json的作用:npm install安装时使用
    git回退到某个commit
    如何把自己的代码发布到npmjs(npm publish)
    阿里蚂蚁的前端ant-design
    axure产品原型图,元件库导入方法
    react with JSX for {if…else…}
    JavaScript的filter用法
    ES6中的模板字符串---反引号``
    react数组key的唯一性
    Swagger简介,轻松构造restful api的文档
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12363489.html
Copyright © 2011-2022 走看看