Java 数据结构进阶二叉树题集下

Java 数据结构进阶二叉树题集下攻略

本文将分享 Java 数据结构进阶二叉树题集下的完整攻略,希望能对读者有所帮助。本文具体展示的是如何使用 Java 实现二叉树的相关算法。

1. 二叉树的创建

二叉树的创建有多种方式,本文以手工创建的方式为例。代码如下:

class Node {
    Node left;      
    Node right;     
    int value;      

    public Node(int value){
        this.value=value;
        this.left=null;
        this.right=null;
    }
}

public class BinaryTree{
    private Node root;     

    public BinaryTree(){
        root=null;
    }

    public void insert(int value){
        Node node=new Node(value);
        if(root==null){
            root=node;
            return;
        }else{
            Node current=root;
            Node parent=null;
            while(true){
                parent=current;
                if(value<current.value){
                    current=current.left;
                    if(current==null){
                        parent.left=node;
                        return;
                    }
                }else{
                    current=current.right;
                    if(current==null){
                        parent.right=node;
                        return;
                    }
                }
            }
        }
    }
}

上述代码中,我们首先定义了一个 Node 类作为二叉树的结点。然后在 BinaryTree 类中,定义了一个私有变量 root 作为二叉树的根结点,并提供了一个 insert 方法用于插入新的结点。

insert 方法中,我们首先判断二叉树是不是空树,如果是空树则直接将新结点设置为根结点。否则我们需要找到新插入结点的位置,这里我们采用了二叉查找树的方式,即比较新插入结点的值与当前结点值的大小,如果小于当前结点值则向左查找,如果大于当前结点值则向右查找。在找到合适的插入位置后,我们将结点插入该位置。

2. 二叉树遍历

二叉树的遍历是指按照某种次序依次访问二叉树中的所有结点。常见的遍历方法有三种:先序遍历、中序遍历和后序遍历。

2.1 先序遍历

先序遍历的顺序是先访问根结点,再访问左子树,最后访问右子树。代码如下:

public void preOrder(Node localRoot){
    if(localRoot!=null){
        System.out.print(localRoot.value+" ");
        preOrder(localRoot.left);
        preOrder(localRoot.right);
    }
}

上述代码中,我们采用递归的方式实现先序遍历。如果当前结点非空,则首先输出当前结点的值,然后递归遍历左子树和右子树。

2.2 中序遍历

中序遍历的顺序是先访问左子树,再访问根结点,最后访问右子树。代码如下:

public void inOrder(Node localRoot){
    if(localRoot!=null){
        inOrder(localRoot.left);
        System.out.print(localRoot.value+" ");
        inOrder(localRoot.right);
    }
}

上述代码中,类似先序遍历,我们也采用递归的方式实现中序遍历。如果当前结点非空,则首先遍历左子树,然后输出当前结点的值,最后递归遍历右子树。

2.3 后序遍历

后序遍历的顺序是先访问左子树,再访问右子树,最后访问根结点。代码如下:

public void postOrder(Node localRoot){
    if(localRoot!=null){
        postOrder(localRoot.left);
        postOrder(localRoot.right);
        System.out.print(localRoot.value+" ");
    }
}

上述代码中,同样采用递归的方式实现后序遍历。如果当前结点非空,则首先递归遍历左子树,然后递归遍历右子树,最后输出当前结点的值。

3. 二叉树的查找

二叉树的查找是指在二叉树中查找某个值是否存在。下面我们给出一个二叉查找树的查找方法。代码如下:

public Node find(int key){
    Node current=root;
    while(current.value!=key){
        if(key<current.value)
            current=current.left;
        else
            current=current.right;
        if(current==null)
            return null;
    }
    return current;
}

上述代码中,我们采用二叉查找树的方式实现查找。首先从根结点开始遍历,如果查找值小于当前结点的值,则向左查找;否则向右查找。如果当前结点为空,则表示该值不存在于二叉树中,返回 null。如果找到了相应的结点,则返回该结点。

示例说明

示例 1

假设我们已经创建了一个二叉树,如下所示:

      12
     /   \
    5     20
   / \   /  \
  2   7 15  22

接下来,我们可以调用二叉树的遍历方法和查找方法,例如:

BinaryTree bt = new BinaryTree();
bt.insert(12);
bt.insert(5);
bt.insert(20);
bt.insert(2);
bt.insert(7);
bt.insert(15);
bt.insert(22);

System.out.println("先序遍历结果:");
bt.preOrder(bt.root);
System.out.println();

System.out.println("中序遍历结果:");
bt.inOrder(bt.root);
System.out.println();

System.out.println("后序遍历结果:");
bt.postOrder(bt.root);
System.out.println();

System.out.println("查找结点 20:");
System.out.println(bt.find(20).value);

上述代码中,我们首先创建了一个二叉树,并分别调用其遍历方法和查找方法。输出结果如下:

先序遍历结果:
12 5 2 7 20 15 22 
中序遍历结果:
2 5 7 12 15 20 22 
后序遍历结果:
2 7 5 15 22 20 12 
查找结点 20:
20

示例 2

假设我们需要构建一个二叉查找树,并插入一些结点,如下所示:

BinaryTree bt = new BinaryTree();
bt.insert(15);
bt.insert(6);
bt.insert(18);
bt.insert(3);
bt.insert(7);
bt.insert(17);
bt.insert(20);

接下来,我们可以调用二叉树的查找方法,例如:

System.out.println("查找结点 7:");
System.out.println(bt.find(7).value);

上述代码中,我们首先创建了一个二叉查找树,并插入了一些结点。然后我们查找值为 7 的结点。输出结果为:

查找结点 7:
7

结论

本文分享了 Java 数据结构进阶二叉树题集下的完整攻略,包含二叉树的创建、遍历和查找等方面的内容。希望这篇文章对读者有所帮助,让读者能更好地掌握二叉树的相关算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 数据结构进阶二叉树题集下 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • hive删除分区数据

    Hive是一个基于Hadoop的数据仓库工具,可以对大规模数据进行存储、管理和分析。在Hive中,分区是一种常用的数据组织方式,可以将数据按照某个字段的值进行分组,方便查询和管理。当需要删除Hive中的分区数据时,可以按照以下步骤进行操作: 1. 查看分区信息 在删除分区数据之前,需要先查看分区信息,确定需要删除的分区。可以使用SHOW PARTITIONS…

    other 2023年5月9日
    00
  • 18.4#if0…endif的用途

    18.4#if0…endif的用途 在日常的程序开发过程中,常常会需要根据条件判断来执行相应的代码。C++中,我们通常使用if语句来进行条件判断。然而,在某些情况下,简单的if语句可能无法满足我们的需求。那么,18.4#if0…endif能为我们解决这类问题。 什么是18.4#if0…endif? 18.4#if0…endif是C++11标准中引入的一种编译…

    其他 2023年3月28日
    00
  • 品优购商城项目(一)mybatis逆向工程

    以下是品优购商城项目(一)mybatis逆向工程的完整攻略,包括基本概念、操作步骤和两个示例说明。 基本概念 MyBatis逆向工程是一种自动生成Java代码的工具,可以根据数据库表结构自动生成Java实体类、Mapper接口和Mapper XML文件。使用MyBatis逆向工程可以大大提高开发效率,减少手动编写Java代码的工作量。 操作步骤 以下是使用M…

    other 2023年5月5日
    00
  • Office2016中excel/ppt右键菜单闪退该怎么办?

    针对“Office2016中excel/ppt右键菜单闪退该怎么办?”的问题,以下是解决该问题的完整攻略: 1. 清除Office缓存文件 第一种方法是清除Office缓存文件,这对于修复大多数Office问题都有效。 执行以下步骤: 关闭所有Office程序,包括Excel、PPT等程序。 打开“文件资源管理器”并输入以下路径:%localappdata%…

    other 2023年6月27日
    00
  • 激战2账号被盗怎么办 官方称账号100%找回恢复功能25日开放

    激战2账号被盗怎么办? 如果你的激战2账号被盗了,第一时间应该采取以下步骤: 1. 尽快修改密码 前往激战2官网登录页面,在登录界面下方找到“修改密码”链接,根据提示修改密码。同时,如果你在其他网站或服务中使用了和激战2相同的账号和密码,也应该立刻修改那些账户的密码,以保护自己的隐私和安全。 2. 立即联系客服 如果账号被盗的情况较为严重,例如角色被删除、游…

    other 2023年6月27日
    00
  • vue异步延时执行

    Vue异步延时执行的攻略 在Vue中,我们经常需要在异步操作中延时执行某些代码。本攻略将详细介绍Vue中异步延的方法,并提供两个示例。 方法1:使用setTimeout函数 我们可以使用JavaScript中的setTimeout函数来实现异步延时执行。以下是体步骤: 在Vue组件中定义一个方法,该方法包含需要延时执行的代码。 在该方法中使用setTimeo…

    other 2023年5月9日
    00
  • JSP利用freemarker生成基于word模板的word文档

    JSP利用Freemarker生成基于Word模板的Word文档 在现今的信息化环境中,大量的文档处理都需要将生成的信息导出为Word文档,因此,如何在Web应用中实现Word文档的生成和导出成为了开发者们的一大问题。本文就将介绍如何使用JavaServer Pages(JSP)和Freemarker模板引擎来生成基于Word模板的Word文档。 1. JS…

    其他 2023年3月28日
    00
  • 详解Android中Intent的使用方法

    详解Android中Intent的使用方法 介绍 在Android开发中,Intent是一种用于在不同组件(例如Activity、Service、BroadcastReceiver等)之间进行通信的机制。通过Intent,我们可以实现应用中不同组件的相互启动、传递数据以及接收返回结果等操作。本文将详细讲解在Android中如何使用Intent。 创建Inte…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部