首页 > 其他分享 >03-二叉树的遍历

03-二叉树的遍历

时间:2023-07-27 21:48:01浏览次数:34  
标签:node 03 结点 遍历 void preorderTravesal 二叉树 中序

二叉树的遍历

定义:

遍历是数据结构中的常见操作把所有元素都访问一遍

线性数据结构的遍历比较简单分为:正序遍历和逆序遍历

根据结点访问顺序的不同,二叉树的常见遍历方式有4种

前序遍历(Preorder Traversal)
中序遍历(inorder Traversal)
后序遍历(Postorder Traversal)
层序遍历(Level Order Traversal)

前序遍历

  • 访问顺序
    • 根结点、前序遍历子树、前序遍历子树
    • 7、4、2、1、3、5、9、8、11、10、12
      类似递归
	/**
	 * 前序遍历
	 */
@SuppressWarnings("unused")
// 公开的方法
public void preorderTravesal() {
	preorderTravesal(rootNode);
}
// 私有的方法
private void preorderTravesal(Node<E> node) {
	if(node == null) return;
	System.out.println(node.element);
	preorderTravesal(node.liftnode);
	preorderTravesal(node.rightnode);
}
	public static void main(String[] args) {
		BinarySearchTree <Integer> bst3 = new BinarySearchTree<>();
		Integer data[] = new Integer[] {
				7,4,2,1,3,5,9,8,11,10,12
		};
		for(int i = 0 ; i < data.length; i++) {
			bst3.add(data[i]);
		}
		bst3.preorderTravesal();

中序遍历

  • 访问顺序
    • 中序遍历左子树、根结点、中序遍历右子树
      • 1、2、3、4、5、7、8、9、10、11、12
    • 如果访问顺序是下面这样呢?
      • 中序遍历右子树、根结点、中序遍历左子树
      • 12、11、10、9、8、7、5、4、3、2、1
    • 二叉搜索树中序遍历的结果是升序或降序的
	/**
	 * 中序遍历
	 */
	@SuppressWarnings("unused")
	// 公开的方法
	public void inorderTravesal() {
		inorderTravesal(rootNode);
	}
	// 私有的方法
	private void inorderTravesal(Node<E> node) {
		if(node == null) return;
		inorderTravesal(node.liftnode);
		System.out.println(node.element);
		inorderTravesal(node.rightnode);
	}

后序遍历

  • 访问顺序
    • 后序遍历左子树、后序遍历右子树、根结点
      • 1、3、2、5、4、8、10、12、11、9、7
	/**
	 * 后序遍历
	 */
	@SuppressWarnings("unused")
	// 公开的方法
	public void psotorderTravesal() {
		psotorderTravesal(rootNode);
	}
	// 私有的方法
	private void psotorderTravesal(Node<E> node) {
		if(node == null) return;
		// 先左再右后自身
		psotorderTravesal(node.liftnode);
		psotorderTravesal(node.rightnode);
		System.out.println(node.element);//自身 
	}

后序遍历

  • 访问顺序
    • 从上到下、从左到右依次访问每一个结点
    • 7、4、9、2、5、8、11、1、3、10、12
  • 实现思路:使用队列(先入先出)
    1.将根结点入队
    2.循环执行以下操作,直到队列为空
    • 将队头结点A出队,进行访问
    • 将A的左子节点入队
    • 将A的右子节点入队

标签:node,03,结点,遍历,void,preorderTravesal,二叉树,中序
From: https://www.cnblogs.com/li-len/p/17586149.html

相关文章

  • windows安装xadmin==0.6.1报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0
    直接用pip安装xadmin会报以下错误:pipinstallxadmin==0.6.1报错:Completeoutputfromcommandpythonsetup.pyegg_info:Traceback(mostrecentcalllast):File"<string>",line1,in<module>File"C:\Users\Administror\......
  • Android studio id 'org.jetbrains.kotlin.android' version '1.7.20' apply fals
    如何实现"Androidstudioid'org.jetbrains.kotlin.android'version'1.7.20'applyfalse"在Android开发中,AndroidStudio是一个常用的集成开发环境(IDE),用于开发Android应用程序。在AndroidStudio中,我们可以使用Kotlin作为一种更现代化的编程语言。本文将向刚入行的开发者介绍......
  • mysql启动报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:330
    mysql启动报错:ERROR2003(HY000):Can'tconnecttoMySQLserveron'localhost:3306'(10061)netstat-ano|findstr3306,检查端口3306上是否有进程运行(或直接检查任务管理器中的进程),发现mysqld.exe进程未运行以管理员身份运行cmd,键入netstartmysql,遇到报错:MySQL服务......
  • Starting MySQL.Logging to '/data/mysql8/data/zwzxzkptapp.err'. . ERROR! The
    实现MySQL日志文件路径修改1.了解MySQL日志文件MySQL服务器在运行时会产生多个日志文件,其中包括错误日志、查询日志、二进制日志等。每个日志文件都有一个特定的作用和存储路径。2.修改MySQL错误日志文件路径在MySQL中,错误日志文件用于记录MySQL服务器的错误信息。默认情况下......
  • Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
    @RequestParam用来处理Content-Type为application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性。可以用于接收URL中的参数并捆绑到方法的参数中,也可以接受post请求体中的Content-Type为application/x-www-form-urlencoded的数据。(post比较常用的是json格式......
  • 运行 'Tomcat 8.5.31' 出错: 无法打开调试器端口 (127.0.0.1:62511): java.net.Socket
    多个中间件占用一个端口,修改端口  ......
  • Docker不能启动,ERROR: ZONE_CONFLICT: 'docker0' already bound to a zone
    Docker服务意外停止,想要重启Docker服务时,却遇到了 ERROR:ZONE_CONFLICT:'docker0'alreadyboundtoazone的错误,解决方案如下:https://stackoverflow.com/questions/67497455/failed-to-start-docker-daemon-firewalld-docker-zone-already-existsthisworks(doallthes......
  • jquery 遍历tr
    Jquery遍历tr的实现方法作为一名经验丰富的开发者,我会教你如何使用jQuery遍历<tr>元素。在这篇文章中,我们将会使用以下步骤来实现目标:获取<table>元素遍历<tr>元素在循环中执行操作下面是每个步骤需要完成的具体操作,以及对应的代码和注释。步骤一:获取<table>元素首先,我们......
  • 036PlantUML画代码逻辑图
    在平时的工作中,经常会遇到绘制时序图、流程图的需求。在要求不高的时候,我们可以选择ProcessOn、Xmind这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更熟悉代码的了。今天给大家推荐一款画图工具PlantUML,可以配合IDEA使用,画图也更高效!一、PlantUML简介la......
  • day03课程回顾
    课程回顾进制十进制转换二进制十进制数除以2倒取余数二进制转换十进制二进制转换八进制从低位次开始三位一组,如果最高位不足三位补0,将每一组三位二进制转换为八进制八进制转换二进制一个八进制数转换成三个二进制数,不足的位次补0二进制转换十六进制从低位次......