首页 > 其他分享 >LeetCode - #144 二叉树的前序遍历

LeetCode - #144 二叉树的前序遍历

时间:2022-10-07 18:01:10浏览次数:60  
标签:node 144 示例 Swift 前序 二叉树 var root public

前言

我们社区陆续会将顾毅(Netflix 增长,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新到 143 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:简单

1. 描述

给你二叉树的根节点 ​​root​​ ,返回它节点值的 前序 遍历。

2. 示例

示例 1

LeetCode - #144 二叉树的前序遍历_迭代

输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2

输入:root = []
输出:[]

示例 3

输入:root = [1]
输出:[1]

示例 4

LeetCode - #144 二叉树的前序遍历_iOS_02

输入:root = [1,2]
输出:[1,2]

示例 5

LeetCode - #144 二叉树的前序遍历_迭代_03

输入:root = [1,null,2]
输出:[1,2]

约束条件:

  • 树中节点数目在范围​​[0, 100]​​ 内
  • ​-100 <= Node.val <= 100​

3. 答案

/**
*
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/

class PreorderTraversal {
func preorderTraversal(root: TreeNode?) -> [Int] {
var res = [Int]()
var stack = [TreeNode]()
var node = root

while !stack.isEmpty || node != nil {
if node != nil {
res.append(node!.val)
stack.append(node!)
node = node!.left
} else {
node = stack.removeLast().right
}
}

return
  • 主要思想:使用堆栈来帮助迭代树。
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

该算法题解的仓库:LeetCode-Swift

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

后续还会翻译大量资料到我们公众号,有感兴趣的朋友,可以加入我们。

标签:node,144,示例,Swift,前序,二叉树,var,root,public
From: https://blog.51cto.com/u_15551344/5734813

相关文章

  • .Net CLR GC plan_phase二叉树和Brick_table
    楔子别那么懒,勤快点。以下取自CLRPreView7.0。主题GC计划阶段(plan_phase)主要就两个部分,一个是堆里面的对象构建一颗二叉树(这颗二叉树的每个节点包含了诸如对象移动......
  • 平衡二叉树的平衡代码实现
    AVL树是一种平衡二叉树,得名于其发明者的名字(Adelson-Velskii以及Landis)。(可见名字长的好处,命名都能多占一个字母出来)。平衡二叉树递归定义如下:左右子树的高度差小于......
  • 数据结构-平衡二叉树的基本旋转
    1、AVL树(平衡二叉树)的定义平衡二叉树 全称叫做 平衡二叉搜索(排序)树,简称AVL树。英文:BalancedBinaryTree(BBT),注:二叉查找树(BST)AVL什么意思?AVL是大学教授G.M.A......
  • 二叉树与树、森林之间的转换
    一、成树、森林转换为二叉树树转化成二叉树的步骤:树中所有相邻兄弟结点之间加一条线对树中的每个结点只保留它与长子之间的连线,删除与其他孩子之间的连线以树的根结点......
  • 平衡二叉树板子(转载)
    #include<iostream>#include<cstdio>#defineMAXN100010usingnamespacestd;introot,tot;structSplay{intfa;intch[2];intval;intcn......
  • 树结构系列(二):平衡二叉树、AVL树、红黑树
    前面说到二叉树在极端情况下会退化成链表,那如何解决这个问题呢?答案是:树的平衡。我们通过树的平衡,使得左右子树的深度保持在较小范围内,从而保证二叉树的查询效率。这就是平......
  • leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal 根据前
    一、题目大意给定两个整数数组,preorder和postorder,其中preorder是一个具有无重复值的二叉树的前序遍历,postorder是同一棵树的后序遍历,重构并返回二叉树。如果存......
  • 树和二叉树
    树的定义:树(Tree)是n(n>=0)个结点的有限集。若n=0,则称空树若n>0,则它满足如下两个条件:(1)有且只有一个特定的称为根(Root)的结点(2)其余结......
  • 二叉树两个节点的最近公共祖先问题
    二叉树两个节点的最近公共祖先问题作者:Grey原文地址:博客园:二叉树两个节点的最近公共祖先问题CSDN:二叉树两个节点的最近公共祖先问题题目描述给定一棵二叉树的头节点......
  • 101.对称二叉树 100.相同的树
    注意compare比较的只是左右节点!!!/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;......