• 【算法】【二叉树模块】求一个二叉树是否包含另一个二叉树的拓扑结构


    前言

    当前所有算法都使用测试用例运行过,但是不保证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
    再次感谢左大神对我算法的指点迷津!

  • 相关阅读:
    416. 分割等和子集【01背包、动态规划dp】
    【每日一题】652. 寻找重复的子树
    【鸟哥杂谈】十分钟搭建自己的本地 Node-Red可拖拽图形化物联网
    QTimer类的使用方法
    EDUCoder编程练习题解(循环二)
    ROS melodic 中同时使用python2 和python3
    【Vue2.x源码系列04】依赖收集原理(Dep、Watcher、Observer)
    环形链表-力扣
    docker-compose一键启动neo4j
    【漏洞复现】深信服科技EDR平台存在任意用户登录漏洞
  • 原文地址:https://blog.csdn.net/qq_39760347/article/details/127070018