【Leetcode】二叉树的递归遍历

【Leetcode】二叉树的递归遍历

  • 先序遍历
    • 题目链接
      • 代码一:
      • 代码二:
  • 迭代法
    • 先序遍历:
    • 中序遍历:
    • 后序遍历:

先序遍历

题目链接

【Leetcode】二叉树的递归遍历

代码一:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func preorderTraversal(root *TreeNode) []int {ans := []int{}// 声明一个函数变量dfsvar dfs func(*TreeNode)// 需要先声明函数变量,才能在函数内部使用dfs = func(node *TreeNode) {if node == nil {return }ans = append(ans, node.Val)dfs(node.Left)dfs(node.Right)}dfs(root)return ans
}

代码二:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/func preorderTraversal(root *TreeNode) []int {if root == nil {return []int{};}ans := []int{}dfs(root, &ans)return ans
}func dfs(root *TreeNode, ans *[]int){if root != nil{*ans = append(*ans, root.Val)dfs(root.Left, ans)dfs(root.Right, ans)}
}

迭代法

先序遍历:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func preorderTraversal(root *TreeNode) []int {if root == nild {return []int{}}// 迭代法ans := []int{}// 辅助栈s := []*TreeNode{}// 只要栈中有元素 或者走到右孩子不为nilfor len(s) > 0 || root != nil {// 走到最左左孩子for root != nil {// 添加结果ans = append(ans, root.Val)// 路径节点入栈s = append(s, root)// 跳到左孩子节点root = root.Left}// 让当前根节点的右孩子作为新的根节点,继续遍历逻辑root = s[len(s)-1].Right// 回溯一步s = s[:len(s)-1]}return ans
}

中序遍历:

func inorderTraversal(root *TreeNode) (res []int) {stack := []*TreeNode{}for root != nil || len(stack) > 0 {for root != nil {stack = append(stack, root)root = root.Left}root = stack[len(stack)-1]stack = stack[:len(stack)-1]// 执行处理逻辑res = append(res, root.Val)// 进入右子树遍历root = root.Right}return
}

后序遍历:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func postorderTraversal(root *TreeNode) []int {ans := []int{}s := []*TreeNode{}// 记录上一次访问的节点var pre *TreeNodefor len(s) > 0 || root != nil {// 走到最左子孩子for root != nil {s = append(s, root)root = root.Left}// 回溯一步root = s[len(s)-1]// 出栈s = s[:len(s)-1]// 如果右子树还没有遍历过,则缓存当前点,并进入到右孩子if root.Right != nil && root.Right != pre {// 存储当前节点s = append(s, root)// 进入到右孩子开始遍历root = root.Right}else {ans = append(ans, root.Val)// 更新最近一次走过的节点pre = root// 手动让root为nil,避免下一次循环重复遍历一遍左子树root = nil}}return ans
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用官方构建工具来创建一个vue3的项目

当你使用 Vite 构建项目时,可能会发现在命令行界面无法选择是否包含 TypeScript 等其他基础配置。此外,使用 vue create 命令创建项目时,默认会使用 vue-cli,但项目启动等过程可能较慢。在这种情况下,你可以参考以下步…

Matlab论文插图绘制模板第135期—隐函数曲面图(fimplicit3)

在之前的文章中,分享了Matlab隐函数折线图的绘制模板: 进一步,再来分享一下隐函数曲面图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关…

CG Magic分享3dmax渲染太亮问题如何解决?

3D Max软件渲染时,渲染问题较多也是正常的,对于行业小白来说,渲染问题多也是能理解的,因为,小编经常在问答中,看到一些网友提问,3dmax渲染太亮怎么办? 3dmax渲染太亮了怎么回事&…

SpringSecurity入门demo(四)授权

一、授权demo: 1、资源权限: RequestMapping("/menu") RestController public class MenuManageController {RequestMapping("/test")public String test(){return "这是菜单管理";} }RequestMapping("/role"…

pycharm的使用技巧

1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…

就业难,程序员年纪大了怎么办?

程序员作为一项技术工种,年龄的确可能成为职业生涯发展的一大障碍。但年龄并不是决定职业生涯终点的唯一因素,只要保持对技术的热爱、不断学习提升,并积极调整心态,仍有许多出路可以选择。 1. 职业发展路线 随着年龄的增长&#…

ModuleNotFoundError: No module named ‘mysql‘

首先安装虚拟环境 python3 -m venv myenv 激活虚拟环境 source myenv/bin/activate 报错如下 raceback (most recent call last):File "test.py", line 1, in <module>import mysql.connector ModuleNotFoundError: No module named mysql 解决方法&#…

[DM8] 序列使用说明

注意&#xff1a;创建序列需要CREATE SEQUENCE系统权限 创建序列 CREATE SEQUENCE [ <模式名>.] <序列名> [ <序列选项列表>]; 序列选项&#xff1a; INCREMENT BY <增量值>| START WITH <初值>| MAXVALUE <最大值>| NOMAXVALUE| MINVA…

TDL_big syposis 点评三国之道第一部:桃园三结义

点评三国之道第一部&#xff1a;桃园三结义 I) I) 滚滚长江东逝水&#xff0c;浪花淘尽英雄,是非成败转头空&#xff0c;青山依旧在&#xff0c;几度夕阳红&#xff0c;&#xff08;滚滚长江&#xff0c;汹涌东逝&#xff0c;不可拒&#xff0c;不可留。浪花飞溅&#xff0c;千…

系分备考计算机网络传输介质、通信方式和交换方式

文章目录 1、概述2、传输介质3、网络通信4、网络交换5、总结 1、概述 计算机网路是系统分析师考试的常考知识点&#xff0c;本篇主要记录了知识点&#xff1a;网络传输介质、网络通信和数据交换方式等。 2、传输介质 网络的传输最常见的就是网线&#xff0c;也就是双绞线&…

开源内容管理系统Wagtail本地安装运行并结合内网穿透实现公网访问

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS&#xff0c;建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

最新油价API接口查询 - java版

今日国内油价查询API提供今日全国各地不同标号的油品价格信息。这个接口在市场监控、数据分析、市场投资等领域具有应用市场&#xff0c;通过此接口获取最新的油价信息。 首先&#xff0c;在数据平台中使用API接口需要先注册后申请此API接口。申请成功后使用个人中心的API秘钥…

Docker-Compose详解与部署示例

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许你使用YAML文件配置应用程序的服务、网络和卷&#xff0c;并通过一个简单的命令集启动和管理整个应用程序的容器。通过使用Docker Compose&#xff0c;可以轻松地将多个Docker容器协同工作&#xff0c;构…

Arduino| 开发板介绍、编程入门(引脚信号的输入输出)

Arduino开发板介绍、编程入门 开发板介绍编程入门setup和loop函数引脚信号输入输出数字信号模拟信号 开发板介绍 下面是一张Ardunio Uno R3的引脚图&#xff0c;包含14个数字引脚、6个模拟输入、电源插孔、USB连接和ICSP插头等。 14个数字引脚&#xff1a; Serial&#xff…

React项目搭建流程

第一步 利用脚手架创建ts类型的react项目&#xff1a; 执行如下的命令&#xff1a;create-react-app myDemo --template typescript &#xff1b; 第二步 清理项目目录结构&#xff1a; src/ index.tsx, app.txs, react-app-env.d.ts public/index.ht…

oss挂载ECS

非EMR集群接入OSS-HDFS服务的快速入门_对象存储(OSS)-阿里云帮助中心使用JindoFuse实现以标准的文件系统接口读写OSS-HDFS数据_对象存储(OSS)-阿里云帮助中心 下载最新版本的JindoSDK JAR包。下载地址&#xff0c;请参见GitHubhttps://github.com/aliyun/alibabacloud-jindodat…

基于树莓派5(Raspberry Pi 5)的高性能工业平板电脑升级版!

​ 上海晶珩继推出首个搭载 Raspberry Pi 5 的平板电脑ED-HMI3010系列后&#xff0c;又推出了具备高性能和多功能特性的 Raspberry Pi 5 的平板电脑ED-HMI3020系列。ED-HMI3020支持选择7英寸和10.1英寸两种尺寸的触摸屏&#xff0c;可选配 M.2 NVMe SSD 存储扩展&#xff0c;提…

Ubuntu配置基本环境以及docker安装基本中间件

提示&#xff1a;ip地址请改为自己的本地ip 为了安全性&#xff0c;建议都给一些中间件设置密码&#xff08;本文也会教大家如何设置密码&#xff09; 安装vim sudo apt install vim此处如果安装失败&#xff0c;apt要换源。 安装docker docker版本为24.0.2 首先&#xff…

CSS实现元素水平垂直居中几种方案

方案一&#xff1a;利用 display: inline-block; vertical-align: middle; <div class"box"> <div></div> <span></span> </div> .box { width: 500px; height: 500px; background-color: red; text-align: center; } .box div …

修改vscode内置Vue VSCode Snippets(代码片段)

打开插件文件夹 文件夹名是 "作者名.vscode-插件名-版本号"组成的. C:\Users\Administrator\.vscode\extensions\sdras.vue-vscode-snippets-3.1.1\snippets 打开vue.json "prefix": "vbase" 就是代码块的关键词,输入vbase就会提示代码块 …