二叉树的前序、中序和后序遍历(Java实现)

article/2025/9/17 17:24:15


前言

二叉树一遍有前序、中序和后序三种遍历方式,不同的遍历方式有不同的用处。
二叉树遍历都是先左后右的。
二叉树类:

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

在这里插入图片描述
构建这颗树:

        TreeNode root = new TreeNode(4);TreeNode temp1 = new TreeNode(1);TreeNode temp2 = new TreeNode(2);TreeNode temp3 = new TreeNode(3);TreeNode temp5 = new TreeNode(5);root.left = temp2;root.right = temp5;temp2.right = temp3;temp2.left = temp1;

一、前序

1. 中左右进行遍历:

  1. 遍历根节点
  2. 遍历根节点的左节点(如果左节点不是叶子节点,则以当前节点开始,重新从第一步开始)
  3. 遍历根节点的右节点(如果右节点不是叶子节点,则以当前节点开始,重新从第一步开始)

2. 代码实现

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

结果为42135
在这里插入图片描述

二、中序

1. 左中右进行遍历

  1. 遍历根节点的左节点(如果左节点不是叶子节点,则以当前节点开始,重新从第一步开始)
  2. 遍历根节点
  3. 遍历根节点的右节点(如果右节点不是叶子节点,则以当前节点开始,重新从第一步开始)

2. 代码实现

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

结果为:12345
在这里插入图片描述

三、后序

1. 左右中进行遍历

  1. 遍历根节点的左节点(如果左节点不是叶子节点,则以当前节点开始,重新从第一步开始)
  2. 遍历根节点的右节点(如果右节点不是叶子节点,则以当前节点开始,重新从第一步开始)
  3. 遍历根节点

2. 代码实现

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

结果为:13254
在这里插入图片描述

四、逆推二叉树

  • 前序加中序可以逆推二叉树;
	//记录前序中的位置int key = 0;public TreeNode buildTree(int[] preorder, int[] inorder) {return function(preorder,inorder,0,inorder.length - 1);}public TreeNode function(int[] preorder, int[] inorder,int left,int right){if (left == right){TreeNode node = new TreeNode(preorder[key]);key++;return node;} else if (left > right)return null;int rootIndex = 0;for (int i = left; i <= right; i++) {if (inorder[i] == preorder[key]){rootIndex = i;break;}}TreeNode node = new TreeNode(preorder[key]);key++;node.left = function(preorder,inorder,left,rootIndex - 1);node.right = function(preorder, inorder, rootIndex+1, right);if (node.left == node.right)key--;return node;}
  • 后序加中序可以逆推二叉树;
  • 前序加后序不能逆推二叉树;

http://chatgpt.dhexx.cn/article/vkg0Tj5h.shtml

相关文章

二叉树的先序,中序,后序遍历序列

二叉树有三种遍历&#xff1a; 1. 先序遍历&#xff1a; &#xff08;根左右&#xff09; 2.中序遍历 &#xff1a; &#xff08;左根右&#xff09; 3.后序遍历&#xff1a; &#xff08;左右根&#xff09; 举个例子&#xff1a;&#xff08;以下动画图转载自https://blo…

如何判断二叉树的前序,中序,后序遍历

文章目录 前言一、如何判断二叉树的前序&#xff0c;中序&#xff0c;后序遍历&#xff1f;二、已知二叉树的前序遍历和中序遍历&#xff0c;如何得到它的后序遍历&#xff1f;三、程序实现总结 前言 最近复习题中看到二叉树&#xff0c;对于它的前序&#xff0c;中序&#xf…

关于二叉树的前序、中序、后序三种遍历

二叉树遍历分为三种&#xff1a;前序、中序、后序&#xff0c;其中序遍历最为重要。为啥叫这个名字&#xff1f;是根据根节点的顺序命名的。 比如上图正常的一个满节点&#xff0c;A&#xff1a;根节点、B&#xff1a;左节点、C&#xff1a;右节点&#xff0c;前序顺序是ABC&a…

二叉树顺序存储之 前序,中序 ,后序遍历

二叉树遍历的概念&#xff1a; 二叉树的遍历是指从根结点出发&#xff0c;按照某种次序依次访问二叉树中的所有结点&#xff0c;使得每个结点被访问一次且仅被访问一次。 1、前序遍历 先输出当前结点的数据&#xff0c;再依次遍历输出左结点和右结点 如下图二叉树分析&#…

二叉树的前序、中序和后序遍历

目录 文章目录 目录前言一、二叉树遍历是什么&#xff1f;二、二叉树遍历的种类 1.前序遍历2.中序遍历3.后序遍历总结 前言 例如&#xff1a;跟着其他的大神学习了二叉树的遍历&#xff0c;下面简单介绍一下二叉树遍历的知识。 &#xff08;我是一个纯小白&#xff09; 一、二…

二叉树的前序,中序,后序遍历

前序遍历&#xff1a;根节点->左子树->右子树&#xff08;根->左->右&#xff09; 中序遍历&#xff1a;左子树->根节点->右子树&#xff08;左->根->右&#xff09; 后序遍历&#xff1a;左子树->右子树->根节点&#xff08;左->右->根&a…

二叉树的前序、中序、后序遍历

文章目录 前言一、用递归法实现遍历1.1 前序遍历1.2 中序遍历1.3 后序遍历 二、用迭代法实现遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历2.3.1 后序解法一2.3.2 后序解法二 三、测试验证 前言 本文主要记录二叉树的遍历方法&#xff0c;文章的主要知识点来源为&#xff1a; htt…

二叉树中已知前序和中序求其后序(图解加技巧让你轻松掌握)

一 首先咱得了解二叉树的结构&#xff0c;和前序/中序/后序遍历分别是什么。 1&#xff1a;什么是根和左右孩子&#xff1a;二叉树的每个节点都可以作为根&#xff0c;每个根下面的叫左右孩子&#xff0c;也可以没有孩子 ​ 实际使用中会如下图A是根左孩子是B,右孩子是C&a…

二叉树的前序、中序、后序

一、概念 二叉树遍历分为三种&#xff1a;前序、中序、后序&#xff0c;其中序遍历最为重要。 二、特点 A&#xff1a;根节点、B&#xff1a;左节点、C&#xff1a;右节点; 前序顺序是ABC&#xff08;根节点排最先&#xff0c;然后同级先左后右&#xff09;&#xff1b;中序…

数据结构:二叉树(先、中、后序)

一、实现功能描述&#xff1a; 1、使用先序序列来创建二叉树&#xff0c;并使用递归算法实现先序、中序、后序输出。 2、使用先序序列来创建二叉树&#xff0c;并使用非递归算法实现先序、中序、后序输出。 3、使用中序、后序的序列来创建二叉树&#xff0c;并使用先序输出。 …

二叉树的先序、中序、后序遍历超详解

以上图为基础 ①前序遍历的方式是&#xff1a;首先访问根节点&#xff0c;然后访问左子树&#xff0c;最后访问右子树。 前序遍历序列&#xff1a;F C A D B E H G M ②中序遍历的方式是&#xff1a;首先访问左子树&#xff0c;接着访问根结点&#xff0c;最后访问右子树。 中序…

二叉树的先序、中序、后序以及层次遍历

二叉树的先序、中序、后序以及层次遍历 方法&#xff1a;在遍历二叉树的时候&#xff0c;一个节点的遍历我们把它看做要经过它三次(下图红色区域)。 当经过一次&#xff0c;被写出来的点&#xff0c;我们称它为先序遍历。 当经过两次&#xff0c;被写出来的点&#xff0c;我…

二叉树的遍历(先序、中序、后序和层次法)

一、二叉树的遍历 ●遍历是指按指定的规律从根结点开始&#xff0c;对二叉树中的每个结点遍历一次且仅遍历一次。 ●遍历可以采用递归方法&#xff08;程序简单&#xff09;和非递归方法&#xff08;程序稍复杂&#xff09;。从中可以寻出“足迹”。 例如下列一颗简单的二叉树…

原生ajax的实现步骤

原生ajax的实现步骤 创建ajax对象 var xhr new XMLHttpRequest(); 告诉ajax请求地址以及请求方式&#xff08;ajax下的open方法&#xff09; xhr.open(‘get’,’http://www.example.com’); 第一个参数为请求方式&#xff0c;第二个参数为请求地址/服务器端对应的路由请求地…

2、原生AJAX

目录 1、GET请求 (1)ajax (2)js路由 2、POST请求 &#xff08;1&#xff09;ajax &#xff08;2&#xff09;js路由 3、服务端响应JOSN数据 &#xff08;1&#xff09;ajax &#xff08;2&#xff09;js路由 4、IE缓存问题 &#xff08;1&#xff09;ajax &#xf…

AJAX ------ 原生 AJAX

原生 AJAX GET 请求 一. 实例要求&#xff1a;点击按钮&#xff0c;发送GET请求&#xff0c;在 div 中做呈现 HELLO AJAX 创建 server.js 文件 //1.引入expressconst express require(express);//2.创建应用对象const app express();//3.创建路由规则//requset是对请求报…

关于原生的Ajax详解

一、Ajax对于前端开发的意义 我们常称Ajax是前端开发者的梦想&#xff0c;为什么这么说呢&#xff1f;Ajax的出现揭开了无刷更新页面数据的时代&#xff0c;JavaScript的实用性也得到了巨大的提升&#xff0c;网页可以在不重载的情况下&#xff0c;实现异步更新&#xff0c;而在…

猿创征文 | 如何使用原生AJAX请求数据

目录 一、什么是AJAX 二、AJAX请求数据的步骤 第一步&#xff1a;创建XMLHttpRequest的实例对象 第二步&#xff1a;打开一个连接 open() 第三步&#xff1a;设置请求头 setRequestHeader() 第四步&#xff1a;发送请求 send() 第五步&#xff1a;接收响应 三、常用请求…

原生ajax和Jquery的ajax

目录 原生ajax 传统请求&#xff08;同步方式&#xff09;的问题 Ajax优势和作用 Ajax请求与传统请求的区别&#xff1a; ajax原理&#xff08;方法&#xff0c;属性 &#xff09; XMLHttpRequest open send 属性 readyState tatus responseText 事件 ajax实现步骤…

原生Ajax 超详细

目录 今天来聊一聊前后端交互的重要工具AJAX 为什么要学习Ajax jQuery 中发起 Ajax 请求最常用的三个方法如下&#xff1a; $.get() $.post() $.ajax() 接口的概念 什么是接口文档 接口文档包括 案例 - 图书管理 完整代码如下&#xff1a; 今天来聊一聊前后端交互的重要…