[二叉树专题]前中后递归遍历和非递归遍历

一、先序遍历

class Solution {
public:
void pre(TreeNode* root,vector<int>&p)
{
if(root!=nullptr)
{
    p.push_back(root->val);
    pre(root->left,p);
    pre(root->right,p);
}
}
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> p;
        pre(root,p);
        return p;
    }
};

二、先序非递归


class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        stack<TreeNode*> p;
        vector<int> result;
        if (root != nullptr) {
            p.push(root);
        }
        while (!p.empty()) {
            TreeNode*q=p.top();
            p.pop();
            result.push_back(q->val);
            if (q->right!=nullptr)
                p.push(q->right);
            if (q->left!=nullptr)
                p.push(q->left);
        }
        return result;
    }
};

 二、中序非递归


class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode*> p;
        if (root == nullptr)
            return result;
        TreeNode* s = root;
        while (s != nullptr || !p.empty()) {
            if (s != nullptr) {
                p.push(s);
                s = s->left;
            } else {
                s = p.top();
                p.pop();
                result.push_back(s->val);
                s = s->right;
            }
        }
        return result;
    }
};

三、后序非递归:前序中左右子树入栈顺序稍作修改,将最后结果反转即可达到后序遍历


class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
     vector<int>result;
     stack<TreeNode*>p;
     TreeNode*q;
     if(root==nullptr)
     return  result;
     p.push(root);
     while(!p.empty())
     {
       q=p.top();
       result.push_back(q->val);
       p.pop();
       if(q->left)p.push(q->left);
       if(q->right)p.push(q->right);
     }
     reverse(result.begin(),result.end());
     return result;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java强训day1(选择题编程题)

选择题 class Person{//堆public String name;public int age;public double weight;//方法区public void eat(){System.out.println(name"eat()");} }public class TestDemo2 {public static void main(String[] args) {//栈Person p1new Person();Person p2new Per…

基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp

基于Python的豆瓣电影评论的情感分析和聚类分析是一种用于探索电影评论数据的方法。 情感分析 情感分析旨在从文本中提取情感信息&#xff0c;并对其进行分类&#xff0c;如正面、负面或中性。在这里&#xff0c;我们使用了一个名为snownlp的Python库来进行情感分析。Snownlp是…

深入了解达梦数据库的增删查改操作:从入门到精通

目录 前言&#xff1a; 一.达梦数据库的增删改查 1.创建数据库 2.插入数据 3.查看数据 4.删除数据 5.数据 前言&#xff1a; 在当今数字化的时代&#xff0c;数据库已经成为企业和组织的核心资产&#xff0c;是实现高效数据处理、存储和管理的重要工具。达梦数据库&…

linux下msyql自动备份

环境变量配置 vim /etc/profile 追加/usr/local/mysql&#xff0c;MySQL数据库默认安装路径 source /etc/profile 创建定时备份脚本 mkdir /home/mysqlDump/ vim /home/mysqlDump/mysql.sh #!/bin/bash mysqldump -uroot -p123456 bim_ry_prod > /home/mysqlDump/bim…

Qt/QML编程之路:QtMultimedia/Radio(41)

Qt有一个神奇的组件,那就是Qtmultimedia,它有强大的功能: 看看很多多媒体功能,都能在这里找到,不仅audio、video,还有camera、sound和radio。 比如: import QtQuick 2.0 import QtMultimedia 5.0Text {text: "Press Me!"font.pointSize: 24Audio {id: playM…

《幻兽帕鲁》被指AI缝合,开发过程疑点重重,最后附游戏安装教程

由日本游戏工作室Pocketpair开发的《Palworld / 幻兽帕鲁》毫无疑问成为了2024年的首个巨热游戏&#xff01;上周五&#xff08;2024年1月19日&#xff09;游戏上线抢先体验&#xff0c;仅在3天内销量就已突破400万&#xff01;并于2024年1月21日创下了1291967名同时在线玩家的…

Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载

目录 搭建 TFTP 服务文件下载更多内容 TFTP&#xff08;Trivial File Transfer Protocol&#xff0c;简单文件传输协议&#xff09;是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务&#xff0c;端口号…

Ddosify 作为压测工具的使用指南

文章目录 1. 写在最前面1.1 Kubernetes 监控1.2 Performance Testing 2. 命令行安装 & 使用2.1 安装2.2 使用2.2.1 默认的例子2.2.2 定制的例子 3. Dashboard 安装 & 使用3.1 安装3.2 使用3.2.1 简单使用3.2.3 依赖的服务介绍 4. 碎碎念5. 参考资料 1. 写在最前面 由于…

空调设计软件工程师考虑点

空调设计软件工程师考虑点 看如的下边有输入压力P&#xff0c;单位不同&#xff0c;MPG是相对压力&#xff0c;Kpa是绝对压力。绝对压力比相对压力大一个大气压&#xff0c;即100kpa。 海立压缩机直接给转速值就行。CAN数据格式&#xff0c;Motoral高位在前&#xff0c;Intel高…

解决找不到vcruntime140_1.dll无法继续执行代码的常用方法

Vcruntime140_1.dll文件的缺失是一个常见的系统问题&#xff0c;它可能会引发一系列不良影响。具体来说&#xff0c;当计算机系统中这个至关重要的动态链接库文件&#xff08;vcruntime140_1.dll&#xff09;丢失或损坏时&#xff0c;依赖于该文件运行的各种应用程序将无法获取…

【3.4数据库系统】逻辑结构设计

目录 1.关系模型的概念1.1 关系模型的基本概念1.2 关系模型相关概念 2.逻辑结构设计 1.关系模型的概念 1.1 关系模型的基本概念 关系模型属于数据模型 数据模型三要素:数据结构、数据操作、数据的约束条件。 1.2 关系模型相关概念 △目或度:关系模式中属性的个数。 △候选码…

5118优惠码vip、svip、专业版和旗舰版使用yhm666

5118大数据平台会员优惠码【yhm666】&#xff0c;结算时勾选“使用优惠码”&#xff0c;然后在优惠码窗口中输入yhm666&#xff0c;然后点确定即可享受特价会员价格。阿腾云atengyun.com分享如下图&#xff1a; 5118会员优惠码【yhm666】 5118会员价格和使用优惠码之后的价格对…

springboot初始项目每一层的含义

一.创建的时候主要勾选了以下 二.项目架构 三.有的项目下创建出来&#xff0c;存在更多不同的层级 src/main/java/com/example/demo/controller: 控制器层&#xff0c;包含处理 HTTP 请求和响应的控制器类。 src/main/java/com/example/demo/service: 服务层&#xff0c;包含业…

Excel·VBA时间范围筛选及批量删除整行

看到一个帖子《excel吧-筛选开始时间&#xff0c;结束时间范围内的所有记录》&#xff0c;根据条件表中的开始时间和结束时间构成的时间范围&#xff0c;对数据表中的开始时间和结束时间范围内的数据进行筛选 目录 批量删除整行&#xff0c;整体删除批量删除整行&#xff0c;分…

77_组合

描述 给定两个整数 n 和 k&#xff0c;返回范围[1, n]中所有可能的 k 个数的组合。 你可以按任何顺序返回答案。 思路 数组问题 从横向上来看往往有 遍历、滑动窗口、动态规划等思路。但是&#xff0c;其实在遍历这种横向取数过程中&#xff0c;可以根据条件的判断形成树形操作…

提高设计效率的5款免费画图软件推荐

在当今的数字世界中&#xff0c;我们有各种各样的创作工具&#xff0c;尤其是绘图软件。所以问题是&#xff1a;我们应该如何选择许多免费绘图软件&#xff1f;为了回答这个问题&#xff0c;我们将在本文中免费介绍和评估10个领先的绘图软件。每一个都有自己独特的特点和优势&a…

蓝桥杯省赛无忧 课件41 选择排序

01 选择排序的思想 02 选择排序的实现 03 例题讲解 #include <iostream> using namespace std; void selectionSort(int arr[], int n) {int i, j, min_index;// 移动未排序数组的边界for (i 0; i < n-1; i) {// 找到未排序的部分中最小元素的索引min_index i;for (…

HTML炫酷页面代码分享

目录 代码雨 鼠标点击爱心特效 鼠标跟随特效 实例演示&#xff1a; 代码雨 鼠标点击爱心特效 鼠标跟随特效 代码雨 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Code</title><style>…

shell脚本-条件测试、

一.条件测试 1.&#xff08; &#xff09; 和 { } &#xff08;&#xff09;会进/data ,开启子shell { } 直接切过去了&#xff0c;不开子shell 小案例&#xff1a; 2. test 命令 测试特定的表达式是否成立&#xff0c;当条件成立&#xff0c;测试语句的返回值为0&#xff…

2024问题汇总

2024问题汇总 Linux1.df-h / df -i 命令2.为多网卡Linux云服务器配置策略路由 Windows1.快速进入控制面板 网络连接指令 Linux 1.df-h / df -i 命令 df -h / df -i 都表示查看磁盘空间使用信息 如果遇到磁盘快满的情况&#xff0c;用这两个命令区别如下 df -h 是去删除比较大 …