广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java栈实现二叉树的非递归遍历的示例代码
  • 165
分享到

java栈实现二叉树的非递归遍历的示例代码

2024-04-02 19:04:59 165人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。 二叉树设置 class node{ public int val; public Node left

一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。

二叉树设置


class node{
	public int val;
	public Node left;
	public Node right;
	
	public Node(int v) {
		val=v;
		left=null;
		right=null;
	}
}

public class Main {
	public static void main(String[] args) {
		Node head =new Node(0);
		Node node1=new Node(1);
		Node node2=new Node(2);
		Node node3=new Node(3);
		Node node4=new Node(4);
		Node node5=new Node(5);
		Node node6=new Node(6);
		head.left=node1;
		head.right=node2;
		node1.left=node3;
		node1.right=node4;
		node2.left=node5;
		node2.right=node6;
		pos2(head);
		pos1(head);
		in(head);
	}

在这里插入图片描述

前序遍历

思想和流程

  • 弹出就打印
  • 如果有右子树,就压入
  • 如果有左子树,就压入

public static void pos1(Node h) {
	System.out.print("先序遍历 ");
	if(h!=null) {
		Stack<Node>stack =new Stack<Node>();
		stack.push(h);
		while(!stack.isEmpty()) {
			h=stack.pop();
			System.out.print(h.val+" ");
			if(h.right!=null) {
				stack.push(h.right);
			}
			if(h.left!=null) {
				stack.push(h.left);
			}
		}
	}
	System.out.println();
}

后序遍历

前序遍历的顺序是父节点,左,右,而后序遍历的顺序是左,右,父节点,也就是说前序遍历左右替换之后就是后序遍历的倒过来。所以只要把前序遍历时候左右子节点压栈的顺序调换一下,再用另一个栈储存,然后再弹出就是后序遍历了。在此代码就不多写了。

中序遍历

思路和流程

  • 弹出就打印
  • 整条左边界依次入栈
  • 上一条件无法继续,弹出打印,开始右子树

public static void in(Node h) {
	System.out.print("中序遍历 ");
	if(h!=null) {
		Stack<Node>stack =new Stack<Node>();
		while(!stack.isEmpty()||h!=null) {
			if(h!=null) {
				stack.push(h);
				h=h.left;
			}else {
				h=stack.pop();
				System.out.print(h.val+" ");
				h=h.right;
			}
		}
	}
	System.out.println();
}

后序遍历变体

用一个Stack实现
思路是左节点没处理就处理左节点,左节点处理过了就处理右节点,右节点处理完了就返回。


public static void pos2(Node h) {
	if(h!=null) {
		Stack<Node>stack =new Stack<Node>();
		stack.push(h);
		Node c=null;//用c记录上一次被打印的节点
		while(!stack.isEmpty()) {
			c=stack.peek();
			if(c.left!=null&&h!=c.left&&h!=c.right) {
				stack.push(c.left);
			}else if(c.right!=null&&h!=c.right) {
				stack.push(c.right);
			}else {
				System.out.print(stack.pop().val+" ");
				h=c;//记录本次被打印的节点
			}
		}
	}
}

打印结果

在这里插入图片描述

到此这篇关于java栈实现二叉树的非递归遍历的文章就介绍到这了,更多相关java实现二叉树的非递归遍历内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java栈实现二叉树的非递归遍历的示例代码

本文链接: https://www.lsjlt.com/news/122097.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java栈实现二叉树的非递归遍历的示例代码
    一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。 二叉树设置 class Node{ public int val; public Node left...
    99+
    2022-11-11
  • java栈如何实现二叉树的非递归遍历
    这篇文章主要介绍了java栈如何实现二叉树的非递归遍历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。二叉树设置class Node{public int&...
    99+
    2023-06-14
  • Java二叉树的四种遍历(递归与非递归)
    目录一、先序遍历与后序遍历 二、中序遍历三、层序遍历一、先序遍历与后序遍历 先序遍历根节点,再遍历左子树,再遍历右子树。 后序遍历先遍历左子树,再遍历右子树,再遍历根节点。 先序遍...
    99+
    2022-11-12
  • Python用非递归实现二叉树中序遍历代码分享
    这篇文章主要介绍“Python用非递归实现二叉树中序遍历代码分享”,在日常操作中,相信很多人在Python用非递归实现二叉树中序遍历代码分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python用非递归实...
    99+
    2023-06-02
  • Java二叉树的递归和非递归遍历方法是什么
    本篇内容主要讲解“Java二叉树的递归和非递归遍历方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java二叉树的递归和非递归遍历方法是什么”吧!前言二叉树的遍历方法分为前序遍历,中序遍...
    99+
    2023-06-30
  • Java实现二叉树的示例代码(递归&迭代)
    目录1.二叉树基本概念见上节:详解Java中二叉树的基础概念(递归&迭代) 2.本次展示链式存储 以此图为例,完整代码如下: //基础二叉树实现 //使用左右孩子表示法 ...
    99+
    2022-11-13
  • C++非递归实现二叉树的前中后序遍历
    目录二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的前序遍历 在不使用递归的方式遍历二叉树时,我们可以使用一个栈模拟递归的机制。二叉树的前序遍历顺序是:根 → 左子树 → ...
    99+
    2022-11-12
  • C++实现二叉树非递归遍历算法详解
    目录一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问...
    99+
    2023-05-17
    C++二叉树非递归遍历 C++非递归遍历 C++二叉树遍历
  • java非递归实现之二叉树的前中后序遍历详解
    二叉树的前中后序遍历 核心思想:用栈来实现对节点的存储。一边遍历,一边将节点入栈,在需要时将节点从栈中取出来并遍历该节点的左子树或者右子树,重复上述过程,当栈为空时,遍历完成。 前序...
    99+
    2022-11-12
  • C++非递归如何实现二叉树的前中后序遍历
    小编给大家分享一下C++非递归如何实现二叉树的前中后序遍历,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二叉树的前序遍历在不使用递归的方式遍历二叉树时,我们可以使...
    99+
    2023-06-21
  • 二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)
    typedef struct TreeNode *BinTree; typedef BinTree Position;  struct TreeN...
    99+
    2022-10-18
  • 刷题系列 - Python用非递归实现二叉树后续遍历
    顺便把Python用非递归实现二叉树后续遍历也写了。其实前序中序和后续都是针对父节点说的。比如下面这个最简单二叉树。前序就是ABC,父节点A在前中序就是BAC,父节点A在中间后序就是BCA,父节点A在最后无论多复杂二叉树,基本都是同样遍历流...
    99+
    2023-06-02
  • Java开发深入分析讲解二叉树的递归和非递归遍历方法
    目录前言1.递归遍历2.非迭代遍历3.二叉树的统一迭代法前言 二叉树的遍历方法分为前序遍历,中序遍历,后续遍历,层序遍历。 1.递归遍历 对于递归,就不得不说递归三要素:以前序遍历...
    99+
    2022-11-13
  • Java 数据结构中二叉树前中后序遍历非递归的具体实现详解
    目录一、前序遍历1.题目描述2.输入输出示例3.解题思路4.代码实现二、中序遍历1.题目描述2.输入输出示例3.解题思路4.代码实现三、后序遍历1.题目描述2.输入输出示例3.解题思...
    99+
    2022-11-12
  • 刷题系列 - Python中怎么通过非递归实现二叉树前序遍历
    这期内容当中小编将会给大家带来有关刷题系列 - Python中怎么通过非递归实现二叉树前序遍历,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。二叉树前序遍历(Binary Tree Preorder Tra...
    99+
    2023-06-02
  • 利用JS实现二叉树遍历算法实例代码
    目录前言 一、二叉树 1.1、遍历二叉树 1.2、用js表示二叉树 1.3、前序遍历算法 1.4、中序遍历算法 1.5、后序遍历算法 1.6、按层遍历算法 二、算法题 1.1、二叉树...
    99+
    2022-11-12
  • 如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现
    本篇文章为大家展示了如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、前序遍历1.题目描述给你二叉树的根节点 root ,返回它节点值的...
    99+
    2023-06-25
  • 详解Java 二叉树的实现和遍历
    目录什么是二叉树二叉树建树前序建树中序建树后序建树二叉树的遍历什么是二叉树 简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。 由于很多排序算...
    99+
    2022-11-13
  • 通俗易懂讲解C语言与Java中二叉树的三种非递归遍历方式
    详解二叉树的三种非递归遍历方式(附C、java源码) 前言 二叉树的递归遍历方式很简单,三种递归遍历方式的区别,只是printf放的位置不一样而已,这里就不多讲了。把前序遍历代码贴在...
    99+
    2022-11-12
  • 图解二叉树的三种遍历方式及java实现代码
    二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子。1.二叉树节点作为图的特殊形式,二叉树的基本组成单元是节点与边;作为数据结构,其基本的组成实体是二叉树节点(binary tree node),而边则对应于节点之...
    99+
    2023-05-31
    java 二叉树 遍历
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作