当前位置: 首页 > news >正文

【每日刷题】Day130

【每日刷题】Day130

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 144. 二叉树的前序遍历 - 力扣(LeetCode)

2. 94. 二叉树的中序遍历 - 力扣(LeetCode)

3. 145. 二叉树的后序遍历 - 力扣(LeetCode)

1. 144. 二叉树的前序遍历 - 力扣(LeetCode)

//思路:非递归。

//递归进行遍历二叉树非常简单,但是非递归就要麻烦很多了。

class Solution {

public:

    vector<int> preorderTraversal(TreeNode* root)

    {

        vector<int> ans;

        stack<TreeNode*> st;//存放节点的栈

        TreeNode* cur = root;

        while(cur||!st.empty())

        {

            while(cur)//一路往左遍历到空

            {

                ans.push_back(cur->val);

                st.push(cur);

                cur = cur->left;

            }

            TreeNode* tmp = st.top();//获取栈顶节点,也就是返回上一个节点

            st.pop();

            cur = tmp->right;//去右子树继续重复上述过程

        }

        return ans;

    }

};

2. 94. 二叉树的中序遍历 - 力扣(LeetCode)

//思路:非递归。

//基本思路与 "前序遍历" 的非递归基本一致。唯一的区别在于访问根节点值的时机。

// "前序遍历" 中 cur 在遍历的同时就记录了根节点的值。而中序遍历我们需要在 cur 往左遍历到空后,记录根节点的值。 

class Solution {

public:

    vector<int> inorderTraversal(TreeNode* root)

    {

        vector<int> ans;

        stack<TreeNode*> st;

        TreeNode* cur = root;

        while(cur||!st.empty())

        {

            while(cur)//往左遍历到空,并将节点放入栈中

            {

                st.push(cur);

                cur = cur->left;

            }

            ans.push_back(st.top()->val);//记录根节点值

            TreeNode* tmp = st.top();

            st.pop();

            cur = tmp->right;

        }

        return ans;

    }

};

3. 145. 二叉树的后序遍历 - 力扣(LeetCode)

//思路:非递归。

//思路大体上还是相同的,但是细节的处理多了很多。

//首先,还是让 cur 往左遍历到空。随后 tmp 获取栈顶元素,此时分为三种情况:

// 如果 tmp->right 为空,说明此时 tmp 为叶子节点,将值放入 ans 数组中

// 如果 tmp->right 不为空,说明还有右子树,cur 去到 tmp->right

// 这种情况最麻烦:tmp->right 不为空,但是 tmp->right 的节点的值我们已经存储过了,从 tmp->right 回到根节点,此时我们也是需要记录 tmp->val 的。

//但是根据我们①、②点的逻辑是没法做到的,并且会陷入死循环,因为会一直走 cur = tmp->right 的逻辑

//因此这里我们需要用一个变量 prev 来记录存储过的 tmp->right 节点

class Solution {

public:

    vector<int> postorderTraversal(TreeNode* root)

    {

        vector<int> ans;

        stack<TreeNode*> st;

        TreeNode* cur = root;

        TreeNode* prev = nullptr;

        while(cur||!st.empty())

        {

            while(cur)

            {

                st.push(cur);

                cur = cur->left;

            }

            TreeNode* tmp = st.top();

//前面思路相同

            if(!tmp->right||tmp->right==prev)//如果tmp->right==prev,说明 tmp->right 已经记录过(也可以理解为从tmp->right 回来了),此时 tmp->val也要记录,因为左右子树都遍历完了

            {

                ans.push_back(tmp->val);

                st.pop();

                prev = tmp;//使用 prev 记录存储过的 tmp->right

            }

            else cur = tmp->right;

        }

        return ans;

    }

};

相关文章:

【每日刷题】Day130

【每日刷题】Day130 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 2. 94. 二叉树的中序遍历 - 力扣…...

书生·浦语作业集合

目录&#xff1a; 1. Linux基础知识 2.python基础知识 3.Git基础知识 4.书生大模型全链路开源体系 1.1-Linux基础知识 配置环境后&#xff0c;运行 hello_word.py 在本地终端中进行端口映射 映射成功后&#xff0c;访问 127.0.0.1&#xff1a;7860 1.2-python基础知识 任务…...

得物App科技创新“再上一层楼”,荣获国家级奖项

近日&#xff0c;在2024中国国际服务贸易交易会&#xff08;简称“服贸会”&#xff09;上&#xff0c;得物App荣获“科技创新服务示范案例”奖项。这是国家层面对得物App以科技创新保障品质消费、提升消费体验成效的肯定。 在得物App上&#xff0c;90后、95后这些曾经的“新生…...

C#软键盘设计字母数字按键处理相关事件函数

应用场景&#xff1a;便携式设备和检测设备等小型设备经常使用触摸屏来代替键盘鼠标的使用&#xff0c;因此在查询和输入界面的文本或者数字输入控件中使用软件盘来代替真正键盘的输入。 软键盘界面&#xff1a;软键盘界面实质上就是一个普通的窗体上面摆放了很多图片按钮&…...

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间一般没有紧密的关联关…...

HTTP 教程

HTTP/HTTPS 简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;和 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff0c;超文本传输安全协议&#xff09;是用于在网络中传输信息的两种主要协议。它们定义了客户端和服务器…...

低代码革命:加速云原生时代的端到端产品创新

随着云计算技术的飞速发展&#xff0c;云原生成为了企业数字化转型的重要方向。云原生技术通过容器化、微服务、持续集成/持续部署&#xff08;CI/CD&#xff09;等实践&#xff0c;帮助企业构建和运行可扩展的应用程序。然而&#xff0c;云原生技术的复杂性也给开发团队带来了…...

力扣 92.反转链表Ⅱ

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段24. 两两交换链表中的节点两个一组反转链表 题解225. K 个一组翻转链表K …...

2024年最新版TypeScript学习笔记——泛型、接口、枚举、自定义类型等知识点

今天带来的是来自尚硅谷禹神2024年8月最新的TS课程的学习笔记&#xff0c;不得不说禹神讲的是真的超级棒&#xff01; 文章目录 TS入门JS中的困扰静态类型检查编译TS命令行编译自动化编译 类型检查变量和函数类型检查字面量类型检查 类型推断类型声明声明对象类型声明函数类型…...

java项目之城镇保障性住房管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的城镇保障性住房管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 城镇保障性住房管…...

无人机之航线规划篇

无人机的航线规划是一个复杂但至关重要的过程&#xff0c;它确保了无人机在飞行过程中的安全、高效以及任务的顺利完成。以下是对无人机航线规划的详细解析&#xff1a; 一、定义与目的 无人机航线规划是指依据无人机任务分配&#xff0c;规划出符合安全条件的飞行航线。这一过…...

828 华为云征文|华为 Flexus 云服务器搭建 PicGo 图床

在这个充满非凡意义的日子里&#xff0c;我怀揣着满心的热忱与憧憬&#xff0c;毅然决然地踏上了借助华为 Flexus 云服务器搭建 PicGo 图床的精彩征程。这段旅程&#xff0c;注定充满了无数的挑战与意外之喜&#xff0c;宛如在广袤无垠的数字海洋中勇敢地探寻那神秘而珍贵的宝藏…...

Zabbix 6.4添加中文语言

/usr/share/zabbix/include/locales .inc .phplocale -agrep “zh_CN" yum install langpacks-zh_CN.noarch y y y...

【退役之再次线上部署】Spring Boot + VUE + Nginx + MySQL

这篇博客写在凌晨 4 点 20 分&#xff0c;这个时候我刚线上部署完成 web 项目&#xff0c;自己写的全栈项目 这个点儿&#xff0c;也睡不着了&#xff0c;索性就写篇博客记录一下 一、踩坑实录 这个是 最重要的&#xff0c;所以写在前面 Nginx 配置文件 location location /a…...

Qanything 2 0源码解析系列1:新建知识库

Qanything 2.0源码解析系列1&#xff1a;新建知识库 文章转载自&#xff1a;https://www.feifeixu.top/article/19c76951-5881-4181-bb63-4188b28d3917 &#x1f600; 前言&#xff1a; qanything所有接口都定义在sanic_api.py中 接口函数定义在同级目录下的handler.py中 新建…...

Redis-01 入门和十大数据类型

Redis支持两种持久化方式&#xff1a;RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上&#xff0c;可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照&#xff0c;可以通过恢复RDB文件来恢复数据。 2.AOF持久化…...

IT行业的现状与未来发展趋势

IT行业的现状与未来发展趋势 近年来&#xff0c;随着科技的迅猛发展&#xff0c;IT行业无疑已经成为全球经济增长的重要驱动力之一。无论是人工智能、大数据&#xff0c;还是云计算和区块链技术&#xff0c;IT行业的创新始终在不断推动着各个领域的变革。 人工智能的广泛应用…...

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建Jenkins CI/CD平台 Jenkins 是一个开源的自动化服务器&#xff0c;用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;软件项目。它允许开发人员在软件开发过程中自动化各种任务&…...

今日 leetCode 15.三数之和

15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元…...

Games101笔记-二维Transform变换(二)

1、什么是Transform Transform就是通过一个矩阵&#xff0c;进行缩放、旋转、平移等变换 2、缩放、旋转、切变、平移等基础变换 缩放变换&#xff1a; 反射变换&#xff1a; 切变&#xff1a; 绕原点旋转&#xff1a; 以上都是线性变换&#xff1a; 平移变换&#xf…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...