当前位置: 首页 > news >正文

算法:94. 二叉树的中序遍历--扩展前中后层序遍历

中序遍历 

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

中遍历结果为:H D I B E J A F K C G
 

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100
方法一:递归
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();inorder(root, res);return res;}public void inorder(TreeNode root, List<Integer> res) {if (root == null) {return;}inorder(root.left, res);res.add(root.val);inorder(root.right, res);}
}
方法二:迭代
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();Deque<TreeNode> stk = new LinkedList<TreeNode>();while (root != null || !stk.isEmpty()) {while (root != null) {stk.push(root);root = root.left;}root = stk.pop();res.add(root.val);root = root.right;}return res;}
}

前序遍历  

先序遍历结果为:A B D H I E J C F K G

import java.util.Stack;// 定义二叉树节点
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}public class PreorderTraversal {public static void preorderTraversal(TreeNode root) {if (root == null) {return;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()) {TreeNode current = stack.pop();System.out.print(current.val + " ");// 先将右子树入栈,再将左子树入栈,这样出栈的顺序就是先左后右if (current.right != null) {stack.push(current.right);}if (current.left != null) {stack.push(current.left);}}}public static void main(String[] args) {// 创建二叉树TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);// 非递归前序遍历System.out.println("非递归前序遍历结果:");preorderTraversal(root);}
}

后序遍历 

       
后序遍历结果:H I D J E B K F G C A
在这里插入图片描述

import java.util.Stack;// 定义二叉树节点
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}public class PostorderTraversal {public static void postorderTraversal(TreeNode root) {if (root == null) {return;}Stack<TreeNode> stack = new Stack<>();Stack<TreeNode> output = new Stack<>(); // 用于保存后序遍历结果stack.push(root);while (!stack.isEmpty()) {TreeNode current = stack.pop();output.push(current);if (current.left != null) {stack.push(current.left);}if (current.right != null) {stack.push(current.right);}}// 输出后序遍历结果while (!output.isEmpty()) {TreeNode node = output.pop();System.out.print(node.val + " ");}}public static void main(String[] args) {// 创建二叉树TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);// 非递归后序遍历System.out.println("非递归后序遍历结果:");postorderTraversal(root);//非递归后序遍历结果:
//4 5 2 3 1}
}

层序遍历   

层次遍历结果:A B C D E F G H I J K

在这里插入图片描述

自己的总结及扩展: 算法:二叉树的层序遍历和每层最大值-CSDN博客

https://blog.csdn.net/modi000/article/details/127301630

相关文章:

  • 面试题:String 、StringBuffer 、StringBuilder的区别
  • CDN、CNAME、DNS
  • 二分查找算法:穿越算法迷宫的指南
  • QNX 7.0.0开发总结
  • 设计模式-外观(门面)模式(结构型)
  • [python]yfinance国内不能使用
  • 【数据分享】《中国文化文物与旅游统计年鉴》2022
  • ON DUPLICATE KEY UPDATE 子句
  • 短视频直播教学课程小程序的作用是什么
  • Android应用图标到应用显示过程
  • 【大模型】个人对大模型选择的见解
  • 关于Redis中事务
  • 超详解——深入详解Python基础语法——基础篇
  • 【考研数据结构——C语言描述】第二章 线性表链式存储结构上的基本操作——单链表的插入
  • java生成pdf通过接口下载
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6系列(二)变量的解构赋值
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java 多线程基础, 我觉得还是有必要看看的
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Redis学习笔记 - pipline(流水线、管道)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 高度不固定时垂直居中
  • 搞机器学习要哪些技能
  • 关于字符编码你应该知道的事情
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 让你的分享飞起来——极光推出社会化分享组件
  • 写代码的正确姿势
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​【已解决】npm install​卡主不动的情况
  • ​低代码平台的核心价值与优势
  • ​决定德拉瓦州地区版图的关键历史事件
  • (3) cmake编译多个cpp文件
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (理论篇)httpmoudle和httphandler一览
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三)uboot源码分析
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • ./configure、make、make install 命令
  • .Net Core与存储过程(一)
  • .Net mvc总结
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net多线程总结
  • /etc/sudoers (root权限管理)
  • @Autowired注解的实现原理
  • @ModelAttribute使用详解