当前位置: 首页 > news >正文

剑指Offer26 -- 树

1. 题目描述

剑指 Offer 26. 树的子结



2. 思路

1.暴力,枚举 A A A 中的每个节点,对于该节点 d f s dfs dfs 查找 B B B,时间复杂度为 O ( N 2 ) O(N^2) O(N2) N N N 为节点数。经典的 d f s dfs dfs d f s dfs dfs,爆搜出奇迹!当然,爆搜归爆搜,不要忘了剪枝。小小的剪枝大大的优化。

2.好像没有优化的做法?



3. 代码-暴力

有个小优化,那就是在枚举每个点,并以当前点搜索的时候,要保证 a a a b b b v a l val val 相等,否则就不搜,这样可以节省很多时间。
另外,将是否找到作为一个全局标记 h a s r e s has_res hasres,当已经找到后,后面的就不着了,提前结束 d f s dfs dfs

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    bool has_res;
    bool dfs_check(TreeNode *a, TreeNode *b) {
        // 如果 b 为空,无论 a 是否为空,都说明此时 b 是 a 的一部分
        if(b == nullptr)    return true;
        // b 不为空,a 为空,那么 b 无论如何都不可能是 a 的一部分
        if(a == nullptr)    return false;
        if(a->val != b->val)    return false;
        if(!dfs_check(a->left, b->left))  return false;
        if(!dfs_check(a->right, b->right))    return false;
        return true;
    }
    // b must not nullptr
    void dfs_split(TreeNode* a, TreeNode *b) {
        if(a == nullptr)    return ;
        if(has_res) return ;
        if(a->val == b->val && dfs_check(a, b)) {  // 小优化
            has_res = true;
            return ;
        }
        dfs_split(a->left, b);
        dfs_split(a->right, b);
    }
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(B == nullptr || A == nullptr)    return false;
        has_res = false;
        dfs_split(A, B);
        return has_res;
    }
};


相关文章:

  • ‘无法定位程序输入点kernel32.dll’详细的修复方法,一键快速修复kernel32.dll
  • 瑞芯微RK356X主板复用接口配置方法,触觉智能嵌入式方案商
  • 使用ModbusRTU读取松下测高仪的高度
  • CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案
  • d2025328
  • LAC自动建立L2TP
  • 如何做管理
  • Python Random 模块使用完全指南
  • 【leetcode hot 100 55】跳跃游戏
  • 深入探索 libarchive
  • 【机器人-开发工具】ROS 2(3)常见工具软件安装(2025持续更新......)
  • stress 和 stress-ng(增强版) -压力测试工具
  • linux挂载磁盘
  • Go 语言标准库中database模块详细功能介绍与示例
  • Ingredient-oriented Multi-Degradation Learning for Image Restoration论文阅读
  • git:远程仓库拉取到本地,fork到本地,修改后再上传
  • 【每日论文】Qwen2.5-Omni Technical Report
  • 前端性能优化思路_场景题
  • C#Lambda表达式与委托关系
  • 平台清洗行动:AI浏览器用户生存率高出传统方案17倍
  • 马上评|房屋“注胶堵漏”骗局何以屡屡得逞
  • 今晚油价下调,加满一箱油将省9元
  • 苏丹港持续遭无人机袭击,外交部:呼吁各方保护民用设施和平民安全
  • 上千螺母引发的枪支散件案:五金厂老板的儿子被诉,律师作无罪辩护
  • 王毅同丹麦外交大臣拉斯穆森会谈
  • 牛市早报|上市公司重大资产重组新规出炉,4月经济数据将公布