二叉树的遍历(递归与非递归)

二叉树结构:

public static class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}

先序递归遍历:

public static void preOrder(TreeNode root){if (root == null){return;}System.out.print(root.val + " ");preOrder(root.left);preOrder(root.right);}

中序递归遍历:

public static void inOrder(TreeNode root){if (root == null){return;}inOrder(root.left);System.out.print(root.val + " ");inOrder(root.right);}

后序递归遍历:

public static void posOrder(TreeNode root){if (root == null){return;}posOrder(root.left);posOrder(root.right);System.out.print(root.val + " ");}

用栈改造先序递归遍历:

//用栈改造先序递归方法public static void preOrderUnRecur(TreeNode root){if (root == null){return;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()){TreeNode node = stack.pop();System.out.print(node.val + " ");//栈是先进后出  想要先打印左孩子  就要保证左孩子最后入栈if (node.right != null){stack.push(node.right);}if (node.left != null){stack.push(node.left);}}}

用栈改造中序递归遍历:

//用栈改造中序递归方法public static void inOrderUnRecur(TreeNode root){if (root == null){return;}Stack<TreeNode> stack = new Stack<>();while (!stack.isEmpty() || root != null){if (root != null){stack.push(root);root = root.left;}else {root = stack.pop();System.out.print(root.val + " ");root = root.right;}}}

用栈改造后序递归遍历:

//用栈改造后序递归方法public static void posOrderUnRecur(TreeNode root){if (root == null){return;}Stack<TreeNode> stack1 = new Stack<>();Stack<TreeNode> stack2 = new Stack<>();stack1.push(root);while (!stack1.isEmpty()){TreeNode node = stack1.pop();stack2.push(node);if (node.left != null){stack1.push(node.left);}if (node.right != null){stack1.push(node.right);}}while (!stack2.isEmpty()){TreeNode node = stack2.pop();System.out.print(node.val + " ");}}

提供一颗二叉树:

public static void main(String[] args) {TreeNode head = new TreeNode(1);head.left = new TreeNode(2);head.right = new TreeNode(3);head.left.left = new TreeNode(4);head.left.right = new TreeNode(5);head.right.left = new TreeNode(6);head.right.right = new TreeNode(7);preOrder(head);System.out.println();System.out.println("先序遍历递归版");inOrder(head);System.out.println();System.out.println("中序遍历递归版");posOrder(head);System.out.println();System.out.println("后序遍历递归版");preOrderUnRecur(head);System.out.println();System.out.println("先序遍历栈版");posOrderUnRecur(head);System.out.println();System.out.println("后序遍历栈版");inOrderUnRecur(head);System.out.println();System.out.println("中序遍历栈版");}

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

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

相关文章

mysql 删除数据的四种方法

在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据,本文就来介绍一下四种方法,具有一定的参考价值,感兴趣的可以了解一下 − 目录 写在前面 方法介绍1. DELETE语句 示例&#xff1a; 2. DROP TABLE语句&#xff1a; 3. TRUNCATE TABLE 示例&#x…

SS-Net复现

表1 8 labeled 样本复现结果–Dice&#xff1a;88.540501&#xff0c;Jaccard&#xff1a;79.60452&#xff0c;95HD&#xff1a;7.58588897&#xff0c;误差在可接受范围内 表2 7 labeled 样本复现结果–Dice&#xff1a;86.778431&#xff0c;Jaccard&#xff1a;77.665895&…

Vim是一款功能强大的文本编辑器

简介&#xff1a; Vim是一款功能强大的文本编辑器&#xff0c;广泛用于Linux系统。以下是Vim编辑器的基本使用方法&#xff1a; 打开文件&#xff1a; 使用vim命令加上要编辑的文件名&#xff0c;例如&#xff1a;vim filename。 进入编辑模式&#xff1a; 在Vim中&#xff0c…

算法思想总结:栈

一、栈的经典应用&#xff1a;波兰表达式与逆波兰表达式 我们平时看到的 12*&#xff08;3-4*5&#xff09;6/7 叫做中缀表达式&#xff0c;平时我们习惯用这个计算的原因是我们可以整体地去看到这个表达式并且清楚地知道各个运算符的优先级&#xff0c;但是计算机并不一定知道…

微信小程序四(全局配置和页面配置页面跳转)

全局配置&#xff1a; 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置&#xff1a;最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…

“饕餮之路:贪吃蛇编程精粹“

目录 前言 1.写代码前的预准备 1.1修改控制台 1.2相关WinAPI32知识学习 1.2.1WinAPI32介绍 1.2.2 mode 命令 1.2.3 title 命令 1.2.4COORD 1.2.5GetStdHandle 1.2.6对控制台光标进行设置 1.2.6.1GetConsolrCursorInfo 1.2.6.2 CONSOLE_CURSOR_INFO 1.2.6.3SetConsol…

docker安装mysql,允许远程连接

Docker 安装MySQL sudo docker run --name some-mysql -e MYSQL_ROOT_PASSWORDroot123 -p 3306:3306 -d mysql:5.7.44允许远程连接到 MySQL 服务器&#xff0c;需按以下步骤操作&#xff1a; 进入 MySQL 容器&#xff1a; sudo docker exec -it some-mysql /bin/bash登录 My…

详细说一下索引和性能优化

当我们谈到数据库性能优化时&#xff0c;索引是一个非常重要的篇章。数据库索引是一个数据结构&#xff0c;它可以帮助数据库系统更快地查找数据。 什么是索引&#xff1a; 数据库索引是一种特殊的数据结构&#xff0c;它可以提高数据库查询的速度。可以简单地将数据库索引理解…

vos3000外呼系统客户端无法安装如何解决?

如果 VOS3000 外呼系统客户端无法安装&#xff0c;可以尝试以下解决方法&#xff1a; 检查系统要求&#xff1a; 确保你的计算机满足 VOS3000 外呼系统客户端的系统要求&#xff0c;包括操作系统版本、内存、处理器等。如果系统不符合要求&#xff0c;可能会导致安装失败或者运…

c语言中,数组取地址的书写格式

数组取地址 为了更好的区分数组取地址时的情况&#xff0c;我们建立两个数组&#xff0c;arr1一维数组和arr2二维数组&#xff0c;用printf函数来打印出每个例子arr1和arr2的地址&#xff0c;这样可以更加直观的区分出来。 首先我们看到第一组打印&#xff0c;可以看到若是直接…

【Git 】常用指令

Git Git是一个功能强大的分布式版本控制系统&#xff0c;被广泛应用于各种项目开发中。本文将为您介绍一些常用的Git指令&#xff0c;帮助您更好地使用Git进行版本控制。 Git的特点包括&#xff1a; 分布式&#xff1a;Git是一个分布式版本控制系统&#xff0c;每个开发人员都…

Qt图片等资源管理

Qt的图片等资源管理通常有两种方式 1&#xff0c;直接将图标和一些配置文件打包在可执行程序中 添加qrc文件&#xff0c;可使用qtcreator直接添加 右键选中工程 点击选择即可。 然后添加文件。我这个例子是添加了Image文件夹下的图片资源 使用的时候&#xff0c;可以在代码…

TCP/IP协议(二)

一、TCP-选项 1.简介 在TCP/IP报文中&#xff0c;固定头部下边就是 "选项"部分。 (1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的 (2)大多数的TCP选项部分出现在TCP连接建立阶段 2.构成 2.1 最大报文传输段 最大报文传输段(Ma…

Java面试八股之简述Servlet体系结构

简述Servlet体系结构 Servlet是Java Web开发中的核心组件&#xff0c;用于接收和响应HTTP请求&#xff0c;生成动态内容。它具有平台无关性、协议无关性和动态内容生成能力&#xff0c;遵循明确的生命周期。尽管现代Web开发中更多使用高级框架&#xff0c;但Servlet作为基础&a…

【SAP ME 18】SAP ME创建开发组件ear

1、说明 SC开发组件ear项目是所有sap me二次开发项目的编译入和部署入口,通过ear可以有效的针对子项目的编译和部署 2、创建开发组件

【MATLAB源码-第190期】基于matlab的32QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

云打印怎么下单?网上云打印下单教程来了!

近些年来&#xff0c;随着移动互联网的发展&#xff0c;云打印也越来越火热。如今有越来越多的用户选择云打印服务。但是现在仍有很多不知道如何下单。那么云打印怎么下单呢&#xff1f;今天小易就来和大家介绍一下网上云打印的下单教程。 云打印怎么下单&#xff1f;网上云打印…

C#面:解释什么是 IEnumerable

在 C# 中&#xff0c;IEnumerable 是一个接口&#xff0c;用于表示一个可枚举的集合。 它定义了一个方法 GetEnumerator() &#xff0c;该方法返回一个 IEnumerator 对象&#xff0c;用于遍历集合中的元素。 具体来说&#xff0c;IEnumerable 接口提供了一种统一的方式来访问…

MYSQL45道练习题---持续更新中

来源&#xff1a; Mysql_45道练习题 - 简书 共四张表&#xff1a; ①、course表&#xff1a; CId&#xff1a;课程id Cname&#xff1a;课程名称 TId&#xff1a;老师id ②、student学生表&#xff1a; SId&#xff1a;学生id Sname&#xff1a;…

【LeetCode热题100】【子串】最小覆盖子串

题目链接&#xff1a;76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 先用一个哈希表记录目标字符串tar…