Java实现二叉树的深度优先遍历和广度优先遍历算法示例

针对“Java实现二叉树的深度优先遍历和广度优先遍历算法示例”的题目,下面给出完整的攻略。

什么是二叉树深度优先遍历和广度优先遍历

在学习Java实现二叉树深度优先遍历和广度优先遍历之前,我们需要先了解什么是二叉树深度优先遍历和广度优先遍历。

二叉树深度优先遍历是先访问根节点,再遍历左子树,最后再遍历右子树。而广度优先遍历则是一层一层地访问树节点,即先访问第一层,在访问第二层,直到所有的节点都被访问。

二叉树深度优先遍历

深度优先遍历有三种方式:前序遍历、中序遍历和后序遍历。

1.前序遍历

前序遍历的步骤是:

1.访问根节点
2.遍历左子树
3.遍历右子树

实现示例:

class Node {  
    int val;  
    Node left;  
    Node right;  

    public Node(int val) {  
        this.val = val;  
    }  
}  
public class BinaryTree {  
    //前序遍历  
    public static void preOrder(Node root) {  
        if (root != null) {  
            System.out.println(root.val);  
            preOrder(root.left);  
            preOrder(root.right);  
        }  
    }  

    public static void main(String[] args) {  
        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);  
        Node node7 = new Node(7);  
        Node node8 = new Node(8);  
        node1.left = node2;  
        node1.right = node3;  
        node2.left = node4;  
        node3.left = node5;  
        node3.right = node6;  
        node4.right = node7;  
        node5.left = node8;  
        preOrder(node1);  
    }  
} 

2.中序遍历

中序遍历的步骤是:

1.遍历左子树
2.访问根节点
3.遍历右子树

实现示例:

class Node {  
    int val;  
    Node left;  
    Node right;  

    public Node(int val) {  
        this.val = val;  
    }  
}  
public class BinaryTree {  
    //中序遍历  
    public static void inOrder(Node root) {  
        if (root != null) {  
            inOrder(root.left);  
            System.out.println(root.val);  
            inOrder(root.right);  
        }  
    }  

    public static void main(String[] args) {  
        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);  
        Node node7 = new Node(7);  
        Node node8 = new Node(8);  
        node1.left = node2;  
        node1.right = node3;  
        node2.left = node4;  
        node3.left = node5;  
        node3.right = node6;  
        node4.right = node7;  
        node5.left = node8;  
        inOrder(node1);  
    }  
}

3.后序遍历

后序遍历的步骤是:

1.遍历左子树
2.遍历右子树
3.访问根节点

实现示例:

class Node {  
    int val;  
    Node left;  
    Node right;  

    public Node(int val) {  
        this.val = val;  
    }  
}  
public class BinaryTree {  
    //后序遍历  
    public static void postOrder(Node root) {  
        if (root != null) {  
            postOrder(root.left);  
            postOrder(root.right);  
            System.out.println(root.val);  
        }  
    }  

    public static void main(String[] args) {  
        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);  
        Node node7 = new Node(7);  
        Node node8 = new Node(8);  
        node1.left = node2;  
        node1.right = node3;  
        node2.left = node4;  
        node3.left = node5;  
        node3.right = node6;  
        node4.right = node7;  
        node5.left = node8;  
        postOrder(node1);  
    } 
}

二叉树广度优先遍历

广度优先遍历可以使用队列来实现。

实现示例:

import java.util.LinkedList;  
import java.util.Queue;  
class Node {  
    int val;  
    Node left;  
    Node right;  

    public Node(int val) {  
        this.val = val;  
    }  
}  
public class BinaryTree {  
    //广度优先遍历  
    public static void bfs(Node root) {  
        if (root == null) {  
            return;  
        }  
        Queue<Node> queue = new LinkedList<Node>();  
        queue.offer(root);  
        while (!queue.isEmpty()) {  
            Node node = queue.poll();  
            System.out.println(node.val);  
            if (node.left != null) {  
                queue.offer(node.left);  
            }  
            if (node.right != null) {  
                queue.offer(node.right);  
            }  
        }  
    }  

    public static void main(String[] args) {  
        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);  
        Node node7 = new Node(7);  
        Node node8 = new Node(8);  
        node1.left = node2;  
        node1.right = node3;  
        node2.left = node4;  
        node3.left = node5;  
        node3.right = node6;  
        node4.right = node7;  
        node5.left = node8;  
        bfs(node1);  
    }  
}

通过上面给出的Java实现二叉树深度优先遍历和广度优先遍历算法示例,你已经能够学会如何实现这两种二叉树遍历方式了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现二叉树的深度优先遍历和广度优先遍历算法示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java Apache Commons报错“TransformerFactoryConfigurationError”的原因与解决方法

    “TransformerException”是Java的ApacheCommons类库中的一个异常,通常由以下原因之一引起: XML格式错误:如果XML格式不正确,则可能会出现此异常。例如,可能会缺少必需的元素或属性。 XSLT格式错误:如果XSLT格式不正确,则可能会出现此异常。例如,可能会使用错误的XSLT模板或模板配置错误。 以下是两个实例: 例1 如…

    Java 2023年5月5日
    00
  • emoji表情与unicode编码互转的实现(JS,JAVA,C#)

    Emoji表情和Unicode编码是两种不同的字符编码方式,它们的字符集和编码方式不同,但它们之间是可以互相转换的。本文主要介绍在JS、JAVA、C#中实现Emoji表情和Unicode编码互转的实现攻略,包含几个常用的实例。 JS实现 在JS中,可以使用String.prototype.charCodeAt()和String.fromCharCode()方…

    Java 2023年5月20日
    00
  • java实现网页爬虫的示例讲解

    下面就是Java实现网页爬虫的完整攻略,包括流程、注意事项和示例说明。 流程 网页爬虫的实现流程如下: 定义目标网页地址,并通过Java代码中的URL类创建URL对象。 通过URL对象打开连接并获取输入流,读取目标网页的HTML源代码。 利用正则表达式等方法,从源代码中提取想要的数据或链接。 如果需要,将提取的数据存储到数据库等地方。 如果有链接需要继续抓取…

    Java 2023年5月18日
    00
  • Spring Security认证的完整流程记录

    Spring Security认证的完整流程记录 Spring Security是一个专门用于处理认证和授权的框架,它可以帮助我们很容易地实现常见的安全功能,例如用户认证、授权、单点登录、密码加密等。在使用Spring Security时,我们通常需要了解其认证的完整流程,以便更好地保证应用程序的安全。 下面,将通过以下步骤来描述Spring Securit…

    Java 2023年6月3日
    00
  • java web图片上传和文件上传实例

    下面是关于“Java Web文件上传和图片上传实例”的攻略及示例。 一、文件上传和图片上传的区别 文件上传和图片上传本质上类似,都是将本地文件上传到服务器的某个文件夹中。但是,图片上传还需要进行图片预览和显示操作,所以相较于文件上传,图片上传多了一些处理操作。 二、Java Web实现文件上传和图片上传 在Java Web中,文件上传和图片上传的核心是使用M…

    Java 2023年5月19日
    00
  • Java实现一个达达租车系统的步骤详解

    Java实现一个达达租车系统的步骤详解 第一步:需求分析和规划 在开始开发代码之前,必须先了解项目的需求和规划。在分析需求方面,需要考虑以下几点: 使用者和管理者的系统需求。 如何处理订单和租车。 如何计算租车费用。 如何处理支付和退款。 在规划方面,应该思考以下几点: 创建和管理车辆库存。 创建和管理订单。 创建和管理支付系统。 创建和管理价格计算方法。 …

    Java 2023年5月19日
    00
  • Spring自动装配@Autowired教程

    下面是关于Spring自动装配@Autowired的详细攻略: 什么是Spring自动装配@Autowired 在Spring中,我们说的自动装配(autowiring)是指通过容器自动连接两个或多个不同的bean。当有多个bean可以注入在一个类中时,Spring会自动为我们选择正确的bean并注入。而@Autowired则是Spring提供的一种自动装配…

    Java 2023年5月19日
    00
  • Tomcat配置JMX远程连接的详细操作

    下面将详细讲解Tomcat配置JMX远程连接的操作步骤。 一、在Java环境变量中配置JMX参数 在Java环境变量中配置以下参数,用于开启JMX远程服务: -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.1 -Dcom.sun.management.jmxremote.…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部