【每日挠头算法题(7)】对称的二叉树|二叉树的所有路径

news2024/11/27 0:50:52

欢迎!

  • 前言
  • 一、对称的二叉树
    • 思路:递归法
      • 具体代码如下:
  • 二、二叉树的所有路径
    • 思路:递归法
      • 具体代码如下:
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、对称的二叉树

点我直达~

在这里插入图片描述

思路:递归法

  • 1.题目的意思就是判断这棵树是否是轴对称的,所以我们需要将这棵树分成左子树和右子树两部分。
  • 2.给一个left,right指针分别指向左子树和右子树的根。随后判断这两棵树是否是轴对称。
  • 轴对称要点:
  • (1)左右子树的val值是否相等。
  • (2)左子树的左子节点和右子树的右子节点的val值是否相等。
  • (3)左子树的右子节点和右子树的左子节点的val值是否相等。
  • 所以第二第三点递归判断即可。
  • 注意:递归结束的条件是如果其中一个节点为空,或者都为空,返回。

具体代码如下:

 //思路:判断左右子树是否对称,
class Solution {
public:
    bool isSameTree(TreeNode* left,TreeNode* right)
    {
        //情况1:其中一个节点为空,返回false;或者两个都为空,返回true
        if(left == nullptr || right == nullptr)
            return left == right;
        //都不为空,先判断左右节点val值是否相等,再递归左右子树
        return left->val == right->val && isSameTree(left->left,right->right) && isSameTree(left->right,right->left);        
    }

    bool isSymmetric(TreeNode* root) 
    {
        if(root == nullptr)
            return true;
        TreeNode* left = root->left;
        TreeNode* right = root->right;

        return isSameTree(left,right);
    }
};

时间复杂度:O(n),最坏空间复杂度O(n),当二叉树退化为链式结构时;最好空间复杂度O(logN),当二叉树为满二叉树时

二、二叉树的所有路径

点我直达~

在这里插入图片描述

思路:递归法

  • 给一个顺序表path存储二叉树的所有路径,给一个字符串string road代表每一条路,当该条路到达路的尽头,也就是遇到叶子节点时,将road存储到path中。
  • 具体如下:
  • (1)从根节点开始遍历整棵树,如果该节点为空,则不用做什么,返回即可。
  • (2)如果该节点的左右子节点均为空,表明获得了一条路径,将该路径road存储到path中,再返回即可。
  • (3)如果不是以上两种情况,则继续往下遍历即可,可以先遍历左子树,再遍历右子树,或者相反均可。
    - 注意:每次调用栈桢,road在每一层栈桢中都是不相同的,而一旦更新path,在其他每层栈桢中都会同时更新。

图解如下:
在这里插入图片描述

在这里插入图片描述

具体代码如下:

class Solution {
public:
    void PrevOrder(TreeNode* root,string road, vector<string>& path)
    {
        //只要该节点不为空,则可继续走
        if(root!=nullptr)
        {
            road+=to_string(root->val);

            //只要左右节点都为空,表明获得一条路径
            if(root->left == nullptr && root->right == nullptr)
            {
                path.push_back(road);
            }

            //如果不是以上的情况,则可以继续递归
            else
            {
                node+="->";
                PrevOrder(root->left,road,path);
                PrevOrder(root->right,road,path);
            }
        }

        return ;
    }
    vector<string> binaryTreePaths(TreeNode* root) 
    {
        string node = "";
        vector<string> path;
        PrevOrder(root,road,path);
        
        return path;
    }
};

时间复杂度O(n^2),每次递归需要对road进行拷贝构造,时间代价为O(n),递归n个节点,为O(n^2);空间复杂度O(n^2),每次调用栈桢进行road的拷贝,消耗N^2的空间;

总结

通过这次算法,我深知自己的递归理解得不够透彻,所以需要继续练习递归二叉树方面的题型,说实话,理解递归还是比较重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速选择合适的会计软件?这些推荐值得尝试!

现今&#xff0c;许多公司都在使用会计软件来管理它们的财务&#xff0c;提高工作效率。因此选择一个适合自己公司的会计软件是相当重要的。但是&#xff0c;对于许多小型企业而言&#xff0c;如何选择最适合自己的会计软件并不容易。那么&#xff0c;该如何选择合适的会计软件…

开启跨平台之旅:学习Flutter,掌握移动应用开发的未来

Flutter是一种开源的移动应用开发框架&#xff0c;由Google开发和维护。它使用Dart语言进行编写&#xff0c;并提供了丰富的UI组件和工具&#xff0c;用于构建高性能、跨平台的移动应用程序。 优势 跨平台开发&#xff1a;Flutter是一种跨平台的移动应用开发框架&#xff0c;…

管理类联考——英语——技巧篇——时态表

一般现在时 1.概念&#xff1a;经常、反复发生的动作或行为及现在的某种状况。 2.基本结构&#xff1a;①is/am/are;②do/does否定形式&#xff1a;①am/is/are not;②此时态的谓语动词若为行为动词&#xff0c;则在其前加don‘t&#xff0c;如主语为第三人称单数&#xff0c…

资深测试总结,性能测试-业务量/吞吐量/存量数据设计关联(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 业务量 是不带时…

HTML | html文档中html和body标签的默认尺寸是多少?

新建一个空白的html文件&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><title></title><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sc…

day56|动态规划16-编辑距离问题

583. 两个字符串的删除操作 明确dp数组的含义&#xff1a; dp[i][j] 以i-1为结尾的word1和以j-1为结尾的word2&#xff0c;为相同的最小操作次数递归函数&#xff1a; if word1[i-1] word1[j-1]: dp[i][j] dp[i-1][j-1] # 不需要删除&#xff0c;只看上一层的字符串即可 else…

阿里云如何帮助企业进行数据迁移和数据同步?有哪些应用案例?

阿里云如何帮助企业进行数据迁移和数据同步&#xff1f;有哪些应用案例&#xff1f; [本文由阿里云代理商[聚搜云www.4526.cn]撰写] 阿里云数据迁移与数据同步解决方案 阿里云为企业提供了一系列高效、安全并应对不同场景需求的数据迁移与同步服务。这些服务旨在最大范围减少企…

Seata学习 @GlobalTransactional注解的作用

Seata学习 GlobalTransactional注解的作用 1.自动配置类 SeataAutoConfiguration 引入 seata与SpringBoot的整合包后&#xff0c;基于SpringBoot的自动配置&#xff0c;会往Spring容器中自动添加 SeataAutoConfiguration 而 SeataAutoConfiguration 配置类又会往容器中添加be…

基于Java汽车客运站管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

TrafficRoute:一体化的DNS解析和流量调度套件

TrafficRoute是火山引擎推出的解析调度套件&#xff0c;它实现了“一体化”的解析和调度服务&#xff0c;覆盖「公网解析」、「私网解析」、「流量调度/容灾」等场景&#xff0c;提供高性能、高可用、精准、及时、安全和可定制的解析调度产品集。 TrafficRoute具备云解析 DNS、…

华为OD机试真题 JavaScript 实现【字符串通配符】【2022Q4 200分】

一、题目描述 问题描述&#xff1a;在计算机中&#xff0c;通配符一种特殊语法&#xff0c;广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求&#xff1a; 实现如下2个通配符&#xff1a; &#xff1a;匹配0个或以上的字符&#xf…

【一文解决】已安装CUDA与Pytorch但torch.cuda.is_available()为False

目录 问题描述总览&#xff1a;导致问题的原因可能1&#xff1a;CUDA版本与驱动程序不兼容可能2&#xff1a;CUDA库的路径设置存在问题可能3&#xff1a;PyTorch版本与CUDA版本不匹配可能4&#xff1a;编译问题可能5&#xff1a;软件包或库冲突写在最后 问题描述 已经安装CUDA…

2023 陕西省大学生网络安全技能大赛 --- 高职组 Crypto ezmath

文章目录 题目解题过程 题目 from Crypto.Util.number import * from secret import y,a,b flagbflag{} l len(flag) m1, m2 flag[: l // 2], flag[l // 2:]x bytes_to_long(m1) c bytes_to_long(m2)assert (x**21)*(y**21)-2*(xy)*(x*y1)gift-4*x*y 4*b**6-2*a**33*a*c …

JavaScript案例分享:让前端开发者抓狂的按钮

前言 我分享一个前端案例&#xff0c;代码来源我不确定&#xff0c;可能是我某个编程技术交流群的群友分享的。由于我设置了自动下载文件&#xff0c;今天在查看微信文件时偶然发现了这个案例&#xff0c;查看下载日期是6月7日&#xff0c;所以无法确定到底是哪个群友分享的。但…

618,你会入手哪些书?【文末送书】

好书分享 前沿技术人工智能半导体新一代通信与信息技术网络空间安全参与规则 一年一度的618又到啦&#xff01;今年的618就不要乱买啦&#xff0c;衣服买多了会被淘汰&#xff0c;电子产品买多了会过时&#xff0c;零食买多了会增肥&#xff0c;最后怎么看都不划算。可是如果你…

超强整理,性能测试-常用服务器性能指标分析总结,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 压测过程中&#…

Hive SQL DML

Hive SQL DML 本节所需数据集 数据集 提取码&#xff1a;rkun ⛵加载数据 Load 加载&#xff0c;装载将数据文件移动到与Hive表对应位置&#xff0c;移动时是纯复制&#xff0c;移动操作。纯复制移动指数据load加载到表中&#xff0c;hive不会对表中数据内容进行任何变换&…

Cache技术在星辰处理器中的应用

Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题 文章目录 Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题引言Cache的工作原理需要关闭DCache的情况鱼和熊掌都想要使用内存保护单元MPU使用内存隔离/同步指令 总结参考文献 引言 …

catkin cmake官方教程解读以及资料补充

这里写目录标题 cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件&#xff0c;可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官方教…

虚拟机centos7无法正常启动:Generating“/run/initramfs/rdsosreport.txt“

一、问题描述 1.出现问题的原因 Centos 7 断电导致 &#xff0c;最近电脑老是自己蓝屏&#xff0c;然后重启电脑&#xff0c;一个月里断断续续可能有个3次左右&#xff0c;突然发现启动就这个问题&#xff0c;估计是虚拟机异常物理断电导致的系统磁盘出错了 2.具体的报错信息…