广告
返回顶部
首页 > 资讯 > 精选 >Java二叉树的遍历方式有哪些
  • 928
分享到

Java二叉树的遍历方式有哪些

2023-06-25 13:06:57 928人浏览 安东尼
摘要

本篇内容主要讲解“Java二叉树的遍历方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java二叉树的遍历方式有哪些”吧!二叉树的四种遍历方式:二叉树的遍历(traversing bin

本篇内容主要讲解“Java二叉树的遍历方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java二叉树的遍历方式有哪些”吧!

二叉树的四种遍历方式:

  • 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次。

四种遍历方式分别为:先序遍历、中序遍历、后序遍历、层序遍历。

Java二叉树的遍历方式有哪些

遍历之前,我们首先介绍一下,如何创建一个二叉树,在这里用的是先建左树在建右树的方法,

首先要声明结点TreeNode类,代码如下:

public class Treenode {    public int data;    public TreeNode leftChild;    public TreeNode rightChild;    public TreeNode(int data){        this.data = data;    }}

再来创建一颗二叉树:

    public static TreeNode createBinaryTree(LinkedList<Integer> list){        TreeNode node = null;        if(list == null || list.isEmpty()){            return null;        }        Integer data = list.removeFirst();        if(data!=null){            node = new TreeNode(data);            node.leftChild = createBinaryTree(list);            node.rightChild = createBinaryTree(list);        }        return node;    }

接下来按照上面列的顺序一一讲解,

首先来看前序遍历,所谓的前序遍历就是先访问根节点,再访问左节点,最后访问右节点,

Java二叉树的遍历方式有哪些

如上图所示,前序遍历结果为:

ABDFECGHI

实现代码如下:

    public static void preOrderTraveral(TreeNode node){        if(node == null){            return;        }        System.out.print(node.data+" ");        preOrderTraveral(node.leftChild);        preOrderTraveral(node.rightChild);    }

再者就是中序遍历,所谓的中序遍历就是先访问左节点,再访问根节点,最后访问右节点,

Java二叉树的遍历方式有哪些

如上图所示,中序遍历结果为:

DBEFAGHCI

实现代码如下:

    public static void inOrderTraveral(TreeNode node){        if(node == null){            return;        }        inOrderTraveral(node.leftChild);        System.out.print(node.data+" ");        inOrderTraveral(node.rightChild);    }

最后就是后序遍历,所谓的后序遍历就是先访问左节点,再访问右节点,最后访问根节点。

Java二叉树的遍历方式有哪些

如上图所示,后序遍历结果为:

DEFBHGICA

实现代码如下:

    public static void postOrderTraveral(TreeNode node){        if(node == null){            return;        }        postOrderTraveral(node.leftChild);        postOrderTraveral(node.rightChild);        System.out.print(node.data+" ");    }

讲完上面三种递归的方法,下面再给大家讲讲非递归是如何实现前中后序遍历的

还是一样,先看非递归前序遍历

首先申请一个新的栈,记为stack;

声明一个结点treeNode,让其指向node结点;

如果treeNode的不为空,将treeNode的值打印,并将treeNode入栈,然后让treeNode指向treeNode的右结点,

重复步骤3,直到treenode为空;

然后出栈,让treeNode指向treeNode的右孩子

重复步骤3,直到stack为空.

实现代码如下:

public static void preOrderTraveralWithStack(TreeNode node){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode treeNode = node;        while(treeNode!=null || !stack.isEmpty()){            //迭代访问节点的左孩子,并入栈            while(treeNode != null){                System.out.print(treeNode.data+" ");                stack.push(treeNode);                treeNode = treeNode.leftChild;            }            //如果节点没有左孩子,则弹出栈顶节点,访问节点右孩子            if(!stack.isEmpty()){                treeNode = stack.pop();                treeNode = treeNode.rightChild;            }        }    }

中序遍历非递归,在此不过多叙述具体步骤了,

具体过程:

申请一个新栈,记为stack,申请一个变量cur,初始时令treeNode为头节点;

先把treeNode节点压入栈中,对以treeNode节点为头的整棵子树来说,依次把整棵树的左子树压入栈中,即不断令treeNode=treeNode.leftChild,然后重复步骤2;

不断重复步骤2,直到发现cur为空,此时从stack中弹出一个节点记为treeNode,打印node的值,并让treeNode= treeNode.right,然后继续重复步骤2;

当stack为空并且cur为空时结束。

public static void inOrderTraveralWithStack(TreeNode node){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode treeNode = node;        while(treeNode!=null || !stack.isEmpty()){            while(treeNode != null){                stack.push(treeNode);                treeNode = treeNode.leftChild;            }            if(!stack.isEmpty()){                treeNode = stack.pop();                System.out.print(treeNode.data+" ");                treeNode = treeNode.rightChild;            }        }    }

后序遍历非递归实现,后序遍历这里较前两者实现复杂一点,我们需要一个标记位来记忆我们此时节点上一个节点,具体看代码注释

public static void postOrderTraveralWithStack(TreeNode node){        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode treeNode = node;        TreeNode lastVisit = null;   //标记每次遍历最后一次访问的节点        while(treeNode!=null || !stack.isEmpty()){//节点不为空,结点入栈,并且指向下一个左孩子            while(treeNode!=null){                stack.push(treeNode);                treeNode = treeNode.leftChild;            }            //栈不为空            if(!stack.isEmpty()){                //出栈                treeNode = stack.pop();                                if(treeNode.rightChild == null || treeNode.rightChild == lastVisit) {                    System.out.print(treeNode.data + " ");                    lastVisit = treeNode;                    treeNode  = null;                }else{                    stack.push(treeNode);                    treeNode = treeNode.rightChild;                }            }        }    }

最后再给大家介绍一下层序遍历

具体步骤如下:

首先申请一个新的队列,记为queue;

将头结点head压入queue中;

每次从queue中出队,记为node,然后打印node值,如果node左孩子不为空,则将左孩子入队;如果node的右孩子不为空,则将右孩子入队;

重复步骤3,直到queue为空。

实现代码如下:

public static void levelOrder(TreeNode root){        LinkedList<TreeNode> queue = new LinkedList<>();        queue.add(root);        while(!queue.isEmpty()){            root = queue.pop();            System.out.print(root.data+" ");            if(root.leftChild!=null) queue.add(root.leftChild);            if(root.rightChild!=null) queue.add(root.rightChild);        }    }

到此,相信大家对“Java二叉树的遍历方式有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java二叉树的遍历方式有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Java二叉树的遍历方式有哪些
    本篇内容主要讲解“Java二叉树的遍历方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java二叉树的遍历方式有哪些”吧!二叉树的四种遍历方式:二叉树的遍历(traversing bin...
    99+
    2023-06-25
  • java二叉树的遍历方式详解
    目录一、前序遍历(递归和非递归)二、中序遍历(递归和非递归)三、后序遍历(递归和非递归)四、层序遍历总结一、前序遍历(递归和非递归) 前序遍历就是先遍历根再遍历左之后是右 根左右 ...
    99+
    2022-11-12
  • Java中二叉树遍历的常用方法有哪些
    这篇文章给大家分享的是有关Java中二叉树遍历的常用方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。采用前序遍历、中序遍历、后续遍历实现时,即便采用不同的实现方式(递归方式、非递归),它们的算法结构是有很...
    99+
    2023-06-15
  • Java二叉树的四种遍历方式详解
    二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访...
    99+
    2022-11-12
  • 二叉树遍历方法——前、中、后序遍历(java)
    二叉树结构: static class TreeNode{ public char val; public TreeNode left; public TreeNode right; ...
    99+
    2023-09-20
    算法
  • Java 二叉树遍历的常用方法
    目录递归方式非递归方式层次遍历总结采用前序遍历、中序遍历、后续遍历实现时,即便采用不同的实现方式(递归方式、非递归),它们的算法结构是有很大的相似性。因而针对前三种的遍历我们会总结出...
    99+
    2022-11-12
  • Java实现二叉树的遍历方法是什么
    本篇内容主要讲解“Java实现二叉树的遍历方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现二叉树的遍历方法是什么”吧!遍历二叉树遍历或称周游,traversal。系统地访问数...
    99+
    2023-06-19
  • 详解Java 二叉树的实现和遍历
    目录什么是二叉树二叉树建树前序建树中序建树后序建树二叉树的遍历什么是二叉树 简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。 由于很多排序算...
    99+
    2022-11-13
  • Java二叉树的构造和遍历方法是什么
    今天小编给大家分享一下Java二叉树的构造和遍历方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目一 解...
    99+
    2023-06-29
  • 图解二叉树的三种遍历方式及java实现代码
    二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子。1.二叉树节点作为图的特殊形式,二叉树的基本组成单元是节点与边;作为数据结构,其基本的组成实体是二叉树节点(binary tree node),而边则对应于节点之...
    99+
    2023-05-31
    java 二叉树 遍历
  • java怎么实现二叉树的层次遍历
    这篇文章主要介绍“java怎么实现二叉树的层次遍历”,在日常操作中,相信很多人在java怎么实现二叉树的层次遍历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现二叉树的层次遍历”的疑惑有所帮助!...
    99+
    2023-06-19
  • Python实现二叉树结构与进行二叉树遍历的方法详解
    二叉树的建立 使用类的形式定义二叉树,可读性更好 class BinaryTree: def __init__(self, root): self.key = root sel...
    99+
    2022-06-04
    二叉树 遍历 详解
  • c语言二叉树的前序遍历方法
    这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu...
    99+
    2023-06-19
  • C++实现二叉树层序遍历的方法
    今天小编给大家分享一下C++实现二叉树层序遍历的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树层序遍历Given ...
    99+
    2023-06-19
  • python创建与遍历二叉树的方法实例
    前言 树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构;在计算机领域中也有广泛...
    99+
    2022-11-12
  • C语言二叉树的建立与遍历方法
    本篇内容介绍了“C语言二叉树的建立与遍历方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录这里给一个样例树:总结这里给一个样例树:代码:...
    99+
    2023-06-20
  • Java二叉树的四种遍历(递归与非递归)
    目录一、先序遍历与后序遍历 二、中序遍历三、层序遍历一、先序遍历与后序遍历 先序遍历根节点,再遍历左子树,再遍历右子树。 后序遍历先遍历左子树,再遍历右子树,再遍历根节点。 先序遍...
    99+
    2022-11-12
  • java栈如何实现二叉树的非递归遍历
    这篇文章主要介绍了java栈如何实现二叉树的非递归遍历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。二叉树设置class Node{public int&...
    99+
    2023-06-14
  • C语言二叉树的遍历方法怎么实现
    这篇文章主要介绍“C语言二叉树的遍历方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言二叉树的遍历方法怎么实现”文章能帮助大家解决问题。     在本算法...
    99+
    2023-06-26
  • Java完全二叉树的创建与四种遍历方法分析
    本文实例讲述了Java完全二叉树的创建与四种遍历方法。分享给大家供大家参考,具体如下:有如下的一颗完全二叉树:先序遍历结果应该为:1  2  4  5  3  6  7中序遍历结果...
    99+
    2023-05-30
    java 二叉树 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作