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

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

前言

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

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


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

一、对称的二叉树

点我直达~

思路:递归法

  • 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的空间;

总结

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

相关文章
|
3天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
8 0
|
24天前
|
数据采集 监控 安全
厂区地图导航制作:GIS技术与路径导航算法融合
在智能化、数字化时代,GIS技术为厂区的运营管理带来了革命性变化。本文探讨了如何利用GIS技术,通过数据采集、地图绘制、路径规划、位置定位和信息查询等功能,打造高效、精准的智能厂区地图导航系统,提升企业的竞争力和管理水平。
32 0
厂区地图导航制作:GIS技术与路径导航算法融合
|
27天前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
16 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
27天前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
17 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
1月前
|
存储 算法
【二叉树】—— 算法题
【二叉树】—— 算法题
【二叉树】—— 算法题
|
27天前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
22 0
|
15天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
1天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
2天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
1天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。