Java实现二叉树的建立、计算高度与递归输出操作示例

一、建立二叉树

  1. 首先定义二叉树节点的数据结构:Node
class Node {
    int value;  // 节点值
    Node left;  // 左子树节点
    Node right; // 右子树节点

    public Node(int value) {
        this.value = value;
        left = null;
        right = null;
    }
}
  1. 使用递归的方式来建立二叉树
public Node buildTree(int[] arr, int start, int end) {
    if (start > end) {
        return null;
    }
    int mid = (start + end) / 2;
    Node root = new Node(arr[mid]);
    root.left = buildTree(arr, start, mid - 1);
    root.right = buildTree(arr, mid + 1, end);
    return root;
}
  1. 调用方法来生成二叉树并输出它的结构
int[] arr = {1, 2, 3, 4, 5, 6, 7};
Node root = buildTree(arr, 0, arr.length - 1);
System.out.println(root.value);              // 4
System.out.println(root.left.value);         // 2
System.out.println(root.left.left.value);    // 1
System.out.println(root.left.right.value);   // 3
System.out.println(root.right.value);        // 6
System.out.println(root.right.left.value);   // 5
System.out.println(root.right.right.value);  // 7

二、计算二叉树高度

使用递归的思路来计算二叉树的高度,计算方式即为左子树的高度和右子树的高度中较大值加一。

声明代码如下:

public int getHeight(Node root) {
    if (root == null) {
        return 0;
    } else {
        int leftHeight = getHeight(root.left);
        int rightHeight = getHeight(root.right);
        return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
    }
}

三、递归输出二叉树

使用递归的方式来进行中序遍历,递归过程中输出节点的值即可。

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

示例1:

int[] arr = {1, 2, 3, 4, 5, 6, 7};
Node root = buildTree(arr, 0, arr.length - 1);
inOrder(root);  // 1 2 3 4 5 6 7

示例2:

int[] arr = {10, 20, 30, 40, 50};
Node root = buildTree(arr, 0, arr.length - 1);
inOrder(root);  // 10 20 30 40 50

以上针对Java实现二叉树的建立、计算高度与递归输出操作的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现二叉树的建立、计算高度与递归输出操作示例 - Python技术站

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

相关文章

  • Mybatis批量插入大量数据的最优方式总结

    首先我们来讲解一下Mybatis批量插入大量数据的最优方式总结。在Mybatis中,批量操作可以大大提升插入大量数据的效率。下面是最优的批量插入的方式: 1. 基于JDBC批量操作 在Mybatis中,我们可以通过执行多个SQL语句的方式来实现批量操作。但这种方式效率低下,不推荐使用。相比之下,使用JDBC的批量操作要高效得多。可以使用JDBC批量操作来插入…

    Java 2023年5月20日
    00
  • Commons beanutils组件简介

    Commons BeanUtils 组件简介 Commons BeanUtils 组件是 Apache Common 组件库中的一个组件,它提供了许多用于操作 JavaBean 对象的工具类。 功能介绍 Commons BeanUtils 主要提供以下几个方面的功能: 属性拷贝 BeanUtils 提供了一个 copyProperties() 方法,用于从一…

    Java 2023年6月15日
    00
  • Java实现的程序员老黄历实例

    Java实现的程序员老黄历是一种有趣而又实用的程序,可以帮助程序员们预知未来,并给出一些建议,让程序员收获更多的好运。下面我们一步步来讲解这个程序的实现过程。 实现步骤 首先确定本程序需要实现的功能,以及需要用到的库。本程序需要实现的功能是:根据用户输入的姓名,出生年月日,得到用户的农历生日,并给出一些有趣的建议。程序需要用到的库有: java.util.S…

    Java 2023年5月20日
    00
  • 一文带你深入了解Java的数据结构

    一文带你深入了解Java的数据结构 什么是数据结构 数据结构是指数据如何在计算机中组织和存储的方式。在计算机科学中,数据结构是一种特殊的格式化数据,使得计算机程序能够高效地访问和修改数据。其中,常用的数据结构有数组、链表、栈、队列、树等。 Java的数据结构 Java中自带了一些数据结构类库,例如:Collection、List、Set、Map等。这些数据结…

    Java 2023年5月23日
    00
  • Java的Struts2框架中拦截器使用的实例教程

    下面我会详细讲解Java的Struts2框架中拦截器使用的实例教程,包括其基本概念、在实际代码中的应用以及两个完整的示例,希望对您有所帮助。 1. Struts2框架中的拦截器 在Struts2框架中,拦截器是非常重要的一环。一般来说,拦截器是在执行Action方法之前或之后的一个组件,用于对用户请求进行拦截、验证或干预。Struts2框架中的每一个请求都必…

    Java 2023年5月20日
    00
  • Spring Boot FeignClient 如何捕获业务异常信息

    Spring Boot是基于Spring框架的快速开发微服务的框架。FeignClient是Spring Cloud中常用的声明式Http客户端,可以实现服务之间的调用。在开发过程中,可能会发生业务异常,通过捕获异常信息可以更好地进行问题排查和解决。本文将详细讲解Spring Boot FeignClient如何捕获业务异常信息的完整攻略。 1. Feign…

    Java 2023年5月27日
    00
  • 微信小程序模板消息限制实现无限制主动推送的示例代码

    接下来我将为您详细讲解“微信小程序模板消息限制实现无限制主动推送的示例代码”的攻略。 前置要求 在实现无限制主动推送之前,需要先满足微信官方对于小程序模板消息的限制要求,包括以下几点: 用户首次在小程序中订阅模板消息需用户手动触发; 小程序根据订阅消息的模板发送消息,需用户在小程序中使用过该模板或模板已被用户授权,否则会发送失败; 发送模板消息的次数受到限制…

    Java 2023年5月23日
    00
  • ShardingSphere jdbc实现分库分表核心概念详解

    下面是关于“ShardingSphere JDBC实现分库分表核心概念详解”的完整攻略。 前言 ShardingSphere是一款国产的关系型数据库分布式解决方案。它实现了像分库分表、读写分离等与分布式相关的功能,具有易用、可扩展、可靠等特点。ShardingSphere中的JDBC模块提供了一个JDBC驱动,用户可以通过JDBC驱动直接访问分布式数据库,而…

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