码农知识堂 - 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
    再次感谢左大神对我算法的指点迷津!

  • 相关阅读:
    SpringSecurity(十七)---OAuth2的运行机制(下)-实现一个简单的单点登录应用程序
    力扣labuladong一刷day2共7题
    中介者模式(Mediator Pattern)
    asm:operand number missing after %-letter
    langchain主要模块(三):Chain
    PSP - 蛋白质复合物结构预测 Template Pair 特征 Mask 可视化
    【已解决】The ‘chartInit‘ function makes the dependencies of useEffect Hook……
    【github pages】: windows下构建一个github pages, 实时更新博客
    HamsterBear Linux Low Res ADC按键驱动的适配 + LVGL button移植
    零基础能学大数据技术吗?学完能找到工作吗?
  • 原文地址:https://blog.csdn.net/qq_39760347/article/details/127070018
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号