【LeetCode】No.94. Binary Tree Inorder Traversal -- Java Version

news2024/11/27 21:04:39

题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/

1. 题目介绍(Binary Tree Inorder Traversal)

Given the root of a binary tree, return the inorder traversal of its nodes’ values.

【Translate】: 给定二叉树的根,返回其节点值的中序遍历。

【测试用例】:
testcase1
tesetcase2

【条件约束】:
Constraints

【跟踪】:

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

【Translate】: 递归求解很简单,你能迭代求解吗

2. 题解

这个题就没什么好讲的了, 属于数据结构的基础,即 左-root-右.

2.1 递归

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root){
        List<Integer> res = new ArrayList<>();
        inorder(root, res);
        return res;
    }
    /**
     * 递归三步骤、
     * 1. 确定递归函数的参数和返回值;
     * 2. 确定终止条件;
     * 3. 确定单层递归的逻辑
     */
    private void inorder(TreeNode root, List<Integer> res) {
        if(root == null){
            return;
        }
        inorder(root.left, res);
        res.add(root.val);
        inorder(root.right, res);

    }

}

or

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<Integer> list = new ArrayList<>();
    
    public List<Integer> inorderTraversal(TreeNode root) {
        if (root != null){
            inorderTraversal(root.left);
            list.add(root.val);
            inorderTraversal(root.right);
        }
        return list;
    }
}

act2.1

2.2 栈

程序解释流程图来自于 YaoFrankie 在 Iterative solution in Java - simple and readable 中的comment.
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        
        TreeNode node = root;
        List<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        
        
        while (node != null || !stack.empty()){
            while (node != null){
                stack.push(node);
                node = node.left;
            }
            
            node = stack.pop();
            list.add(node.val);
            node = node.right;
        }
        
        return list;
    }
}

act2.2

3. 参考资料

[1] 前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal) | CSDN
[2] Java实现二叉树的递归遍历(前序遍历、中序遍历、后序遍历) | CSDN

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

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

相关文章

Trie字典树详解

字典树&#x1f4d6;1. 什么是Trie树&#x1f4d6;2. Trie树的一些应用场景&#x1f4d6;3. Trie树的优缺点&#x1f4d6;4. Trie树的节点怎样定义&#x1f4d6;5. 代码实现&#x1f4d6;6. 字典树的优化&#x1f4d6;1. 什么是Trie树 Trie树&#xff0c;又叫字典树&#xff0…

linux性能中常用压测工具

stress工具 stress是Linux的一个压力测试工具&#xff0c;可以对CPU、Memory、IO、磁盘进行压力测试。 安装: sudo yum install stress 命令的使用: -c, --cpu N&#xff1a;产生N个进程&#xff0c;每个进程都循环调用sqrt函数产生CPU压力。 -i, --io N&#xff1a;产生N个进…

Java搭建实战springboot基于若依项目工时统计成本核算管理源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套基于若依开发的springboot项目工时统计成本核算管理源码&#xff0c;该系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术架构 技术框架&#xff1a;Sp…

计算机毕设推荐基于微信小程序的自来水收费系统

&#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设老哥&#x1f525; &#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; Java实战项目专栏 Python实…

帝国CMS后台登录显示空白解决方法汇总

升级PHP版本由原来5.X切换使用PHP7.*运行环境时会出现登录后台空白的情况,以下两种方法可设置支持PHP7.* 帝国CMS后台登录显示空白解决方法操作步骤: 1、全新安装帝国CMS时: 只需安装时“MYSQL接口类型”选择“mysqli”即可支持PHP7系列。系统会自动识别。 2、已经运行的帝国…

送给python初学者的福利!掌握了这些知识,你将超过80%的小白

前言 Python要学多久才能学会&#xff1f;我没有接触过编程怎么办&#xff1f;这是每一个初学者心中的疑问。 小编曾在网上看到一个帖子&#xff1a; 有一名网友是学金融的&#xff0c;他去上海找工作&#xff0c;看到好多公司都要有 Python 开发经验的&#xff0c;而且工资…

UE5笔记【八】导入FBX网格和和材质到UE5

资源网站&#xff1a;TurboSquid。进入&#xff0c;然后搜索Crate。筛选条件&#xff1a;Free。然后找到这个木箱子。 注册下载时&#xff0c;看到好多3D软件。 点击fbx.zip下载。然后解压到相应目录下。 接下来就是如何导入到UE5中&#xff0c;使用这个素材了。 第一种方式&…

MIT6.824 2022 Raft

MIT6.824 2022 RaftRaftleader electionlogpersistencelog compaction整体测试Raft leader election 不论是访问还是修改Raft可变类成员&#xff0c;都需要加锁 rf.mu.Lock() if rf.state ! Leader {rf.mu.Unlock()return } args : AppendEntriesArgs{Term: rf.currentTerm,…

某网站X-Signature签名破解

网站地址: aHR0cHM6Ly9mc2UuYWdpbGVzdHVkaW8uY24= (b64解密) 先全局搜索X-Signature,跳转到app.xxx.js里,找到X-Signature,发现是对请求参数做了_操作,向上_为d 向上找d, d为一个函数, 跟到这里打印i值(“_platform=web,_ts=1669108721743,_versioin=0.2.5,keyword=…

华为服务体系:ITR流程体系详解

如果开发出了好产品&#xff0c;同时也高效率地将产品交付到客户手中。 但客户最终还是选择投诉&#xff0c;而且复购率低&#xff0c;原因是什么呢&#xff1f; 这就跟ITR流程有关了&#xff0c;在ITR不顺畅的时候&#xff0c;企业可能会面临如下挑战&#xff1a; 客户总是…

Serverless 架构下的 AI 应用开发

作者&#xff1a;阿里云云原生 本篇内容连载自《Serverless 架构下的 AI 应用开发&#xff1a;入门、实战与性能优化》。 Serverless 架构与 CI/CD 工具的结合 CI/CD 是一种通过在应用开发阶段引入自动化流程以频繁向客户交付应用的方法。 如图所示&#xff0c;CI/CD 的核心概…

Vue3中的computed和watch属性

文章目录1. computed计算属性2. watch侦听器属性2.1 watchEffect2.2 watch1. computed计算属性 简写写法&#xff08;只实现了 get &#xff09;&#xff1a; <template><div><ul><li v-for"item of carts" :key"item.id">{{ it…

精华推荐 | 【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的存储系统的实现原理和持久化机制

RocketMQ的发展历史 RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。 2016 年 11 月 28 日&#xff0c;阿里巴巴向 广西党性培训 Apache 软件基金会捐赠RocketMQ&#xff0c;成为 Apache 孵化项目。 2017 年 9 月 25 日&#xff0…

webpack安装与基础

概念 webpack是一个前端打包工具用它来处理现代前端错综复杂的依赖关系&#xff08;A插件需要B插件B插件有D插件 F插件需要A插件&#xff09;生成浏览器可以识别静态资源Vue 前期脚手架就是用webpack制作&#xff08;Vue 开始推荐vite构建工具&#xff08;更快&#xff09;&am…

[UE][UE5]Gameplay框架,Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系

[UE][UE5]Gameplay框架,actor,pawn,playerController,Character之间的关系Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系Actor&#xff1a;pawn&#xff1a;character&#xff1a;控制器&#xff08;Controller&#xff09;&#xff1a;playerController…

sqlServer如何实现分页查询

sqlServer的分页查询和mysql语句不一样&#xff0c;有三种实现方式。分别是&#xff1a;offset /fetch next、利用max&#xff08;主键&#xff09;、利用row_number关键字 一、offset /fetch next关键字 2012版本及以上才有&#xff0c;SQL server公司升级后推出的新方法。 …

Shiro前后端分离流程

1.自定义filter 拦截所有携带token的请求&#xff0c; 调用自定义realm&#xff0c;判断token是否正确&#xff0c;不正确realm抛出异常&#xff0c;在filter中被捕获&#xff0c;重定向至token不正确界面 重写了三个方法&#xff1a; 1》isAccessAllowed&#xff1a;如果带…

有一个项目管理软件,名字叫8Manage PM!

优秀的软件工具在项目管理中起到极为重要的作用。8Manage PM项目管理软件由高亚科技自主研发&#xff0c;为项目工作提供项目功能、业务功能、服务功能和工具&#xff0c;有力推动项目成功。 8Manage软件项目功能包括完整性管理、需求管理、计划和执行、资源管理、工作量&…

锐捷BGP基础配置

目录 ​编辑 配置IBGP邻居 配置EBGP邻居 BGP其它配置 配置IBGP邻居 R2、R3、R4底层IGP互通&#xff0c;此处IGP互通配置不做介绍 R2与R4通过Loop0建立IBGP邻居&#xff0c;R3与R4通过Loop0建立IBGP邻居 R4充当反射器&#xff0c;R2和R3作为客户端&#xff08;通过反射可以将…

Vue中设置背景图片和透明度

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 今天来为我自己的项目设置一个好看的登录页面之前是这样的&#xff1a; 乍一看感觉还行&#xff0c;越看越难受&#xff0c;弄一…