码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【算法】【二叉树模块】求一个二叉树是否包含另一个二叉树的拓扑结构


    目录

    • 前言
    • 问题介绍
    • 解决方案
    • 代码编写
      • java语言版本
      • c语言版本
      • c++语言版本
    • 思考感悟
    • 写在最后

    前言

    当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~

    在此感谢左大神让我对算法有了新的感悟认识!

    问题介绍

    原问题
    给定树的根节点r1和r2,判断r1是否包含r2的拓扑结构
    如:
    t1:
    在这里插入图片描述
    t2:
    在这里插入图片描述

    这里头结点123完全包含头结点6,因此结果为true

    解决方案

    将问题下发到每一个子树
    1、判断当前节点为根节点时是否包含r2,如果不包含那么判断左节点是否存在,不存在判断右节点是否存在r2
    2、判断当前节点为根节点的子树和r2同步遍历是否能够涵盖r2

    代码编写

    java语言版本

    方案一:

    
        /**
         * mycheck1 是判断r1是否包含r2的
         * @param root1
         * @param root2
         * @return
         */
        public static boolean myCheck(MyTreeNode root1, MyTreeNode root2){
            if (root2 == null){
                return true;
            }else if (root1 == null){
                return false;
            }
            // 首先判断当前节点为头同步遍历是否包含root2,如果不是,则判断左边是否包含,再判断右边是否包含
            return myCheck2(root1, root2) || myCheck(root1.getLeft(), root2) || myCheck(root1.getRight(), root2);
        }
    
        /**
         * mycheck2 是判断root1和root2同步遍历时是否相同
         * @param root1
         * @param root2
         * @return
         */
        private static boolean myCheck2(MyTreeNode root1, MyTreeNode root2) {
            if (root2 == null){
                return true;
            }else if (root1 == null){
                return false;
            }
            return root1.getData().equals(root2.getData())
                    && myCheck2(root1.getLeft(), root2.getLeft())
                    && myCheck2(root1.getRight(), root2.getRight());
        }
    
    
    
    

    c语言版本

    正在学习中

    c++语言版本

    正在学习中

    思考感悟

    这道题比较简单,但是存在一个嵌套递归和同步递归遍历
    同步递归挺重要的后面的题还会用到,并且同步递归可以判断很多问题,比如树是否是镜像对称树就可以使用同步遍历左右节点完全相同返回true等等。
    到这里慢慢发现二叉树类型的问题在么有最优解的情况下,这个思路基本是万能的。

    写在最后

    方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
    如果需要git源码可邮件给2260755767@qq.com
    再次感谢左大神对我算法的指点迷津!

  • 相关阅读:
    人工原理复习题
    Java三大特性篇之——继承篇(超详解的好吧!)
    我赢助手之引流篇:为什么你在抖音有百万千万粉丝,他们仍然不是你的核心鱼塘?
    etcd和redis的对比
    [技术选型与调研] 流程引擎(工作流引擎|BPM引擎):Activiti、Flowable、Camunda
    领域驱动设计:基于DDD的微服务设计实例
    07-React Hooks(路由组件懒加载, Context上下文, 组件优化...)
    奖补50万,2022年武汉市推动工业互联网平台化发展专项资金申报条件以及奖励补贴标准
    AOP的动态代理机制
    【算法与数据结构】--常见数据结构--树与图
  • 原文地址:https://blog.csdn.net/qq_39760347/article/details/127070018
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号