LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)

2023-11-15

        Given a binary tree, return the preorder traversal of its nodes' values.
        For example:
        Given binary tree {1,#,2,3},
           1
            \
             2
            /
           3
        return [1,2,3].

        Note: Recursive solution is trivial, could you do it iteratively?

        使用迭代(非递归)的方法遍历二叉树。


        可以使用stack或者list记录遍历的回退路径,实现前序遍历。

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

class Solution {
public:
    vector<int> preorderTraversal(TreeNode *root) {
        vector<int> vec;
		if(root==NULL)
			return vec;
		list<TreeNode*> L;
		L.push_back(root);
		TreeNode *current;
		while(!L.empty()){
			current = L.front();
			L.pop_front();
			if(current){
				vec.push_back(current->val);
				L.push_front(current->right);
				L.push_front(current->left);
			}
		}
		return vec;
    }
};


        两者的时间复杂度均是O(n),额外的stack或者list的空间复杂度都是O(logn),但list内部需要维护结点之间的链接指针,所以stack的实际运行效率要更好一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树) 的相关文章

  • 数据结构---树和二叉树

    树和二叉树 定义 二叉树 二叉树的物理结构 链式存储 数组 二叉树应用 查找 维持相对顺序 二叉树的遍历 深度优先遍历 前序遍历 中序遍历 后序遍历 二叉树广度优先遍历 层序遍历 定义 有且仅有一个特定的称为根的节点 当n gt 1时 其余
  • 数据结构和算法--树

    数据结构和算法是一种思想 理解了思想就是忘记了代码也能找回原来的记忆 二叉搜索树 二叉树 每个结点只存储一个关键字 等于则命中 小于走左结点 大于走右结点 AVL树 每个节点的左子树和右子树的高度最多差1的二叉搜索树 B B 树 多路搜索树
  • 《算法》第二章——快排非递归实现

    思路 其实就是用栈保存每一个待排序子串的首尾元素下标 下一次while循环时取出这个范围 对这段子序列进行partition操作 代码 include
  • java希尔排序

    public class ShellSort public static void main String args int a 9 8 7 0 1 3 2 10 5 12 7 0 15 int n a length for int add
  • solr之lucene全文检索的基本原理

    一 总论 根据http lucene apache org java docs index html定义 Lucene是一个高效的 基于Java的全文检索库 所以在了解Lucene之前要费一番工夫了解一下全文检索 那么什么叫做全文检索呢 这
  • 字符串题目:设计 Goal 解析器

    文章目录 题目 标题和出处 难度 题目描述 要求 示例 数据范围 解法 思路和算法 代码 复杂度分析 题目 标题和出处 标题 设计 Goal 解析器 出处 1678 设计 Goal 解析器 难度 2 级 题目描述 要求 请你设计一个可以解释
  • 14-堆排序

    堆 Heap 是一种常见的数据结构 常用于存储数据 其本质上是一棵完全二叉树 下面我们来看看如何用数组实现堆结构及其相关功能 堆的定义 首先来看一下堆的存储结构 堆可以看成是一颗完全二叉树 首先什么是二叉树 借助百度中的解释 二叉树 bin
  • 数据结构---优先队列

    优先队列 实现方式 入队 出队 JAVA实现 总结 二叉堆是实现优先队列的基础 上一篇二叉堆博文 二叉堆 队列的特点是先进先出 FIFO 优先队列不再遵循先入先出的原则 而是分为两种情况 最大优先队列 无论入队顺序如何 都是当前最大的元素优
  • 数据结构和算法(1):开始

    算法概述 所谓算法 即特定计算模型下 旨在解决特定问题的指令序列 输入 待处理的信息 问题 输出 经处理的信息 答案 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序列 可行性 每一基本操作都可实现 且在常
  • 分治法时间复杂度求解:主定理、代换法和递归树

    分治策略 分解 将原问题划分成形式相同的子问题 规模可以不等 对半或2 3对1 3的划分 解决 对于子问题的解决 很明显 采用的是递归求解的方式 如果子问题足够小了 就停止递归 直接求解 合并 将子问题的解合并成原问题的解 这里引出了一个如
  • 算法图解 总结

    定义 算法指的是解题方案的准确而完整的描述 是一系列解决问题的清晰指令 算法代表着用系统的方法描述解决问题的策略机制 也就是说 能够对一定规范的输入 在有限时间内获得所要求的输出 如果一个算法有缺陷 或不适合于某个问题 执行这个算法将不会解
  • 数据结构和算法(1)-----稀疏数组

    一 实际需求 编写的五子棋程序中 有存盘退出和继续上盘的功能 分析问题 因为该二维数组的很多值是默认值0 因此记录了很多没有意思的数据 如何在计算机中高效的存储这样的二维数组是一个需要考虑的问题 二 基本介绍 当一个数组中大部分元素为0 或
  • 【GUI】LVGL8内存泄漏分析

    LVGL版本 V8 0 2 平台 ESP32S3 在调试过程中 发现有两个界面 在重复退出再进入时内存会不断增加的吃内存现象 然后做了分析和研究 1 样式style吃内存 在主页面 进入simple页面 再退出到主页面 再次进入simple
  • LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)

    Given a binary tree return the preorder traversal of its nodes values For example Given binary tree 1 2 3 1 2 3 return 1
  • 蛇形矩阵(Java)

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 输入 本题有多组数据 每组数据由一个正整数N组成 N不大于100 输出 对于每一组数据 输出一个N行的蛇形矩阵 两组输出之间不要额外的空行 矩阵三角中同一行的数字用一个空格分
  • 剑指Offer07:重建二叉树(Java)

    题目描述 解法思路 一开始想了半个小时都没想出来 幸好得到大佬的帮助 终于做出来 嘻嘻 采用递归的思想 不断拆分左右子树即可 首先我们通过前序遍历可以看到这个树的根节点是3 然后通过中序遍历 我们可以知道9是左子树 15 20 7是右子树
  • 二叉树的先序,中序,后序遍历

    java 二叉树的先序 中序 后序遍历 一 前序遍历 访问顺序 先根节点 再左子树 最后右子树 上图的访问结果为 GDAFEMHZ 1 递归实现 public void preOrderTraverse1 TreeNode root if
  • 数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)

    递归的概念 递归能够做解决什么问题 使用递归时需要注意的问题 递归的第一个应用 迷宫回溯问题 迷宫模拟 定义一个8 7的数组模拟迷宫 1表示围墙 0表示可以走的路 图中左上红圈为起点 右下红圈为终点 利用代码找到从起点到终点的路径 使用递归
  • 数据结构---二叉查找树(二叉搜索树)

    二叉查找树 特性 插入 删除 待删除节点没有子节点 待删除节点有一个子节点 待删除节点有两个子节点 JAVA实现 缺陷 二叉查找树 二叉排序树 在二叉树的基础上 增加了 如果左子树不为空 则左子树上所有节点的值都小于根节点的值 如果右子树不
  • 栈的讲解及实现(图解+代码/C语言)

    今天为大家分享的是栈的模拟实现 本文主要讲解如何以数组的形式模拟实现 同时给出链表模拟实现栈的代码 目录 图解栈的结构 数组模拟栈的分步实现 创建并初始化 入栈 检测栈是否为空 出栈 获取栈顶元素 获取栈内有效元素个数 销毁栈 链表模拟实现

随机推荐

  • MySQL中通过一条语句来统计符合不同条件的COUNT

    现在有两个表record 和 info 其中表record存放每次通话记录的主动呼出号码与被动呼入号码 表Info存放人名和对应号码 如下 现在的目的是统计每个人的手机号码主动呼出次数与被动呼入次数 就用到下列语句即可 SELECT nam
  • Openlayers 坐标系全面解析

    目录 EPSG 4326 EPSG 3857 EPSG 4326 与 EPSG 3857 的坐标转换 EPSG 4490 Openlayers 自定义坐标系 EPSG 4490 和 EPSG 4525 EPSG 4326 EPSG 3857
  • CTFshow-pwn入门-前置基础pwn23-pwn25

    pwn23 25的题目会涉及到ret2shellcode ret2libc等内容 本篇文章只会侧重研究这几道题目的wp 不会过多涉及到ret2shellcode ret2libc的基本原理 等有时间再来写关于ret2libc ret2she
  • 移动游戏平台的新趋势分享—91-mgas大会

    移动游戏平台的新趋势分享 91 mgas大会 随着智能手机与平板电脑等设备的普及 移动游戏以惊人的速度深入到人们生活当中 玩家的选择范围进一步扩大 包括角色扮演 策略游戏 棋牌游戏 休闲益智 动作冒险 但耐心在降低 而角色扮演和策略游戏的混
  • 【单片机毕业设计】【mcuclub-dz-047】基于单片机的消毒器设计

    最近设计了一个项目基于单片机的消毒器设计 与大家分享一下 一 基本介绍 项目名 基于单片机的消毒器的设计 项目编号 mcuclub dz 047 单片机 STM32F103C8T6 功能简介 1 通过液位传感器检测液位 当液位较低 通过GS
  • java毕业设计——基于JSP+J2EE+sqlserver的超市综合信息管理系统设计与实现(毕业论文+程序源码)——超市综合信息管理系统

    基于JSP J2EE sqlserver的超市综合信息管理系统设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于JSP J2EE sqlserver的超市综合信息管理系统设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要
  • 如何在python pyqt窗口中,嵌入notepad、word、计算器

    import sys from PyQt5 QtWidgets import QApplication QWidget from ctypes import 成功了 class App QWidget def init self super
  • GIS状态检测新技术——振动分析法

    提示 唐老师好 我之前因为 阳 了 所以就没有参与汇报 给老师带来不便 请老师见谅 以此篇文章代替课堂汇报 文章目录 前言 一 不同故障对应的振动频谱和故障特征量 二 GIS设备振动特征估计 1 GIS设备状态空间 2 粒子滤波 三 GIS
  • vue+element-ui 项目实战示例详解【目录】

    vue 和 element是两个流行的前端即时 通常用于管理后台 PC等页面 能够快速构建美观的界面 1 vue2 介绍 Vue js是一个流行的JavaScript框架 用于构建用户界面 它的版本分为Vue 2和Vue 3 而Elemen
  • bootstrap 和 ant design css样式 冲突 导致图标移位

    bootstrap 和 ant design 冲突 导致图标移位 body anticon transform translate 0 5px 3px
  • 命令模式代码示例

    package com example mingling 执行命令的接口 author Administrator public interface Command void execute package com example ming
  • 【马士兵】Python基础--08(字典)

    Python基础 08 文章目录 Python基础 08 基础知识 字典的组成及原理 字典的创建方式 字典元素的获取 字典元素的增删改操作 获取字典视图 字典元素的遍历 字典生成式 基础知识 可变序列 目前包括字典 列表 不可变序列 目前包
  • 数电学习笔记

    数电学习笔记 背景 笔记正文 背景 在刚开学那段时间把清华大学阎石老师的 数字电子技术基础 第五版又看了一遍 记了点笔记 刚好实验室的打印机有扫描功能 于是把笔记分享一下 笔记正文 以上
  • jni中如何查看函数签名

    操作步骤 第一步 找到 build 文件夹 第二步 找到 javac 文件夹 第三步 找到自己写的 xxx class文件 第四步 右键 xxx class 文件 在 Terminal 中打开 第五步 执行 javap s xxx clas
  • 飞浆(paddle)实现机器学习

    一 飞浆 paddle 介绍 飞桨是国内唯一功能完备的端到端开源深度学习平台 集深度学习训练和预测框架 模型库 工具组件和服务平台为一体 拥有兼顾灵活性和高性能的开发机制 工业级应用效果的模型 超大规模并行深度学习能力 推理引擎一体化设计以
  • [机缘参悟-88]:什么是平台?国家、公司、家庭、硬件、软件、应用?

    目录 前言 1 什么是平台 1 1 英文是platform 1 2 百度百科 1 3 平台的现实案例 2 平台的特征 2 1 相对性 2 2 层次性 2 3 广泛性 第3章 三大系统 3 1 软硬件系统中的平台 3 2 人类社会的平台 3
  • linux网卡team0,team

    1 安装teamd root web01 yum y install teamd 2 停止NetworkManager什么是NetworkManager呢 NetworkManager服务是管理和监控网络设置的守护进程 CentOS7更加注
  • 直方图均衡化算法、直方图匹配算法 C++ 代码

    这两天一直在研究匀光匀色算法才了解到了直方图匹配算法 想要了解这个算法又要先了解直方图均衡化算法 通过网上查找了很多资料 没有现成C 代码 经过仔细思考和实验后大概复现了该算法 特此记录 以备查阅 参考链接如下 1 匀光匀色 直方图匹配算法
  • Spring扫描类的原理

    作为Java的开发者Spring可以称之为神一样的存在框架 好处太多无法用言语表达只能称之为Java排名的number one 框架 我们使用Spring它帮助我们实例化了很多Bean对象 但是这些Bean是怎样加载到Spring容器中的呢
  • LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)

    Given a binary tree return the preorder traversal of its nodes values For example Given binary tree 1 2 3 1 2 3 return 1