day15打卡

news/2024/7/7 23:29:37

day15打卡

226. 翻转二叉树

递归解法:

时间复杂度:O(N),空间复杂度:O(N)

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        //出口
        if(root == nullptr) return root;
        swap(root->left, root->right);
        TreeNode* left = invertTree(root->left);
        TreeNode* right = invertTree(root->right);
        root->left = left;
        root->right = right;
        return root;
    }
};

迭代解法:

  • 方法一

掌握迭代法遍历二叉树即可

时间复杂度:O(N),空间复杂度:O(N)

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == nullptr) return root;
        stack<TreeNode*> st;
        st.push(root);
        while(!st.empty())
        {
            TreeNode* cur = st.top();
            st.pop();
            swap(cur->left, cur->right);
            if(cur->right != nullptr) st.push(cur->right);//左节点交换到了右边
            if(cur->left != nullptr) st.push(cur->left);//反转顺序无所谓
        }
        return root;
    }
};
  • 方法二

层序遍历

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == nullptr) return root;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty())
        {
            for(int i = 0; i < q.size(); i++)//遍历完本层节点后才会进入下一层节点
            {
                TreeNode* top = q.front();
                q.pop();
                swap(top->left, top->right);
                if(top->left) q.push(top->left);
                if(top->right) q.push(top->right);
            }
        }
        return root;
    }
};

101. 对称二叉树

递归解法:

时间复杂度:O(N),空间复杂度:O(N)

class Solution {
public:
    bool dfs(TreeNode* left, TreeNode* right)
    {
        //先判断左右节点
        if(left == nullptr && right != nullptr) return false;
        else if(left != nullptr && right == nullptr) return false;
        else if(left == nullptr && right == nullptr) return true;
        else if(left->val != right->val) return false;
        //再进行递归:保证对称
        bool Left = dfs(left->left, right->right);
        bool Right = dfs(left->right, right->left); 
        return Left && Right;
    }
    bool isSymmetric(TreeNode* root) {
        return dfs(root->left, root->right);
    }
};

迭代解法:

时间复杂度:O(N),空间复杂度:O(N)

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root == nullptr) return true;
        stack<TreeNode*> st;
        st.push(root->left);
        st.push(root->right);
        while(!st.empty())
        {
            TreeNode* right = st.top();
            st.pop();
            TreeNode* left = st.top();
            st.pop();
            if(!left && !right) continue;
            if(!left || !right || (left->val != right->val)) return false;
            st.push(left->left);
            st.push(right->right);
            st.push(left->right);
            st.push(right->left);
        }
        return true;
    }
};
  • 队列
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root == nullptr) return true;
        queue<TreeNode*> q;
        q.push(root->left);
        q.push(root->right);
        while(!q.empty())
        {
            TreeNode* left = q.front();
            q.pop();
            TreeNode* right = q.front();
            q.pop();
            //如果都为空则为true,跳过此次循环
            if(!left && !right) continue;
            //如果一个为空或者节点中数字不同,就直接返回false
            if(!left || !right || (left->val != right->val)) return false;
            //进入下一层节点判断
            q.push(left->left);
            q.push(right->right);
            q.push(left->right);
            q.push(right->left);

        }
        //遍历到最后返回true
        return true;
    }
};

http://lihuaxi.xjx100.cn/news/1987112.html

相关文章

linux服务器ssh连接慢问题处理

一、 可能导致慢的几个原因 1、网络问题&#xff1a;网络延迟、带宽限制和包丢失等网络问题都有可能导致SSH连接变慢。 2、客户端设置&#xff1a;错误的客户端设置&#xff0c;如使用过高的加密算法或不适当的密钥设置&#xff0c;可能导致SSH连接变慢。 3、服务器负载过高…

了解HTTP/1.1、HTTP/1.0 和 HTTP/2.0

HTTP/1.1、HTTP/1.0 和 HTTP/2.0 是超文本传输协议&#xff08;HTTP&#xff09;的三个主要版本 先解释一下什么是超文本协议 超文本传输协议&#xff08;HyperText Transfer Protocol&#xff0c;简称 HTTP&#xff09;是互联网上应用最广泛的一种网络协议。设计 HTTP 的初衷是…

基于springboot+vue的师生健康信息管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

GBASE南大通用数据库通过 GBase ADO.NET 接口读取数据

通过 GBase ADO.NET 接口读取 GBase Server 数据需要下面的步骤&#xff1a; 1) 使用 GBaseConnection 创建数据库连接对象 2) 使用 GBaseCommand 创建命令对象 3) 使用连接对象打开连接 4) 设置命令对象的 CommandText 属性&#xff0c;指明查询语句&#xff0c;并关联连接对…

栈实现队列(附带源码)

一、思路图解 首先&#xff0c;队列&#xff1a;先进先出 栈&#xff1a;先进后出 那么&#xff0c;怎么用栈实现队列呢&#xff1f; 很简单&#xff0c;首先&#xff0c;创建两个栈 一个叫pushsatck,用来入队列 一个叫popstack,用来出队列 队列的核心在于先进先出&#xf…

揭秘大型企业制作产品说明书的方法

​随着科技的飞速发展&#xff0c;大型企业在产品开发、生产和销售过程中&#xff0c;产品说明书扮演着至关重要的角色。它们不仅是消费者了解产品的重要途径&#xff0c;也是企业与消费者沟通的重要桥梁。 但是你知道该如何制作产品的说明书吗&#xff1f;不知道的朋友可以学习…

vp9协议笔记

vp9协议笔记&#x1f4d2; 本文主要是对vp9协议的梳理&#xff0c;协议的细节参考官方文档&#xff1a;VP9协议链接&#xff08;需要加速器&#xff09; vp9协议笔记 vp9协议笔记&#x1f4d2;1. 视频编码概述2. 超级帧superframe&#xff08;sz&#xff09;&#xff1a;2. fr…

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站&#xff0c;尤其是一些材料站。它们是免费下载的&#xff0c;材料的风格目前很流行&#xff0c;适合不同的项目。非常适合平面设计WEB/UI设计师收藏&#xff0c;接下…