java二叉树是非常重要的,它相关的每一个知识点,java人员都要熟练的运用,这是作为Java人员的基本素质,那么java二叉树怎么转成数组?下面我们就来讲解一下。

将一个数组转换成一个二叉树的java实现,如下:import org.junit.Test;

import java.util.ArrayList;

import java.util.List;

/**

* 二叉树的生成

*

* @author DangerShi

*/

public class TreeBuilder

{

class TreeNode

{

Object data;

TreeNode left;

TreeNode right;

public TreeNode()

{}

public TreeNode(Object data, TreeNode left, TreeNode right)

{

this.data = data;

this.left = left;

this.right = right;

}

}

public TreeNode arrayToBTree(Object[] arrs)

{

if (arrs == null || arrs.length == 0)

{

return new TreeNode();

}

List nodes = new ArrayList  (arrs.length);

for (Object obj: arrs)

{

TreeNode treeNode = new TreeNode();

treeNode.data = obj;

nodes.add(treeNode);

}

for (int i = 0; i

{

TreeNode node = nodes.get(i);

node.left = nodes.get(i * 2 + 1);

node.right = nodes.get(i * 2 + 2);

}

// 只有当总节点数是奇数时,最后一个父节点才有右子节点

int lastPNodeIndex = arrs.length / 2 - 1;

TreeNode lastPNode = nodes.get(lastPNodeIndex);

lastPNode.left = nodes.get(lastPNodeIndex * 2 + 1);

if (arrs.length % 2 != 0)

{

lastPNode.right = nodes.get(lastPNodeIndex * 2 + 2);

}

return nodes.get(0);

}

@Test

public void test()

{

/**

* 1

* 2 3

* 4 5 6 7

*/

TreeNode treeNode = arrayToBTree(new Object[]

{ 1, 2 , 3, 4, 5, 6, 7});

}

}

java怎么实现二叉树?

二叉树是一个递归的数据结构,每个节点最多有两个子节点。

通常二叉树是二分查找树,每个节点它的值大于或者等于在它左子树节点上的值,小于或者等于在它右子树节点上的值。如下图

为了实现二叉树,我们使用一个Node类来表示节点,节点存储int类型的值,还有对子节点的引用。package com.java.node.BinaryTree;

public class Node

{

int data;

Node left;

Node right;

public Node(int data)

{

this.data = data;

this.left = null;

this.right = null;

}

}

然后添加树的root节点package com.java.node.BinaryTree;

public class BinaryTree

{

Node root;

}

通常的操作

添加节点

首先我们必须找到新节点的位置,是为了保持树排序。我们必须从root节点开始,必须遵循下面的规则:

如果新节点小于当前的值,我们将会进入左子树。

如果新节点大于当前的节点。我们将会进入右子树。

当当前的节点是null时,我们已经到达叶子节点,我们可以添加新节点到这个位置。

我们将会创建递归方法做添加节点操作private Node addNode(Node current, int value)

{

if (current == null)

{

return new Node(value);

}

if (value

{

current.left = addNode(current.left, value);

}

else if (value > current.data)

{

current.right = addNode(current.right, value);

}

else

{

return current;

}

return current;

}

public void addNode(int value)

{

root = addNode(root, value);

}

可以使用方法创建一个二叉树了public BinaryTree createBinaryTree()

{

BinaryTree bt = new BinaryTree();

bt.addNode(6);

bt.addNode(4);

bt.addNode(8);

bt.addNode(10);

return bt;

}

查找一个节点private boolean containNode(Node current, int value)

{

if (current == null)

{

return false;

}

if (value == current.data)

{

return true;

}

return value

}

public boolean containNode(int value)

{

return containNode(root, value);

}

删除一个节点private Node deleteNode(Node current, int value)

{

if (current == null)

{

return null;

}

if (value == current.data)

{

if (current.left == null && current.right == null)

{

return null;

}

if (current.left == null)

{

return current.right;

}

if (current.right == null)

{

return current.left;

}

int smallestValue = findSmallestValue(current.right);

current.data = smallestValue;

current.right = deleteNode(current.right, smallestValue);

return current;

}

if (value

{

current.left = deleteNode(current.left, value);

return current;

}

current.right = deleteNode(current.right, value);

return current;

}

private int findSmallestValue(Node root)

{

return root.left == null ? root.data : findSmallestValue(root.right);

}

从文章中,我们可以看出java二叉树的知识还是非常重要的,有难点也有易点,要想熟练运用,还是要下功夫才行哦!最后大家如果想要了解更多java常见问题知识,敬请关注奇Q工具网。

推荐阅读:

java 二叉树转数组_java二叉树怎么转成数组?java怎么实现二叉树?相关推荐

  1. java字符串转公式_java把字符串转化成公式计算的示例

    java把字符串转化成公式计算的示例 如下所示: static ScriptEngine jse = new ScriptEngineManager().getEngineByName("J ...

  2. java怎么复制动态数组_Java 数组排序复制等操作(Java Arraycopy)

    //手机终端 请上下左右 滑动屏幕 观看更全! //package Main; public class Arraycopy { public static void main(String[] ar ...

  3. java 传参字符串数组_JAVA语言之okhttp传递数组参数

    比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常. 解决办法:定义一个对象继承自okhttp3.RequestBody public class DefaultRequestBody  ...

  4. java 申请不定长度数组_java中申请不定长度数组ArrayList的方法

    如下所示: import java.util.ArrayList; //java中申请不定长度数组 public class Test01 { public static void main(Stri ...

  5. java new数组_Java如何使用new创建数组

    java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用dataType[arraySiz ...

  6. java不等长二维数组_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  7. java char 动态数组_Java程序来填充char数组中的元素

    可以使用java.util.Arrays.fill()方法将元素填充到char数组中.此方法将所需的char值分配给Java中的char数组.所需的两个参数是数组名称和要存储在数组元素中的值. 演示此 ...

  8. java 7个数排序_JAVA基础(7)-数组的排序

    数组的排序 冒泡排序的基本思想: 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放 ...

  9. java什么是局部变量_java局部变量是什么意思?Java中局部变量与成员变量有哪些区别?...

    大家知道Java中的局部变量吗?今天我们要了解的Java的局部变量及它和成员变量的区别,一起来看看吧. 什么是局部变量? 局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能 ...

  10. java记事本应用程序_Java教程:使用记事本编写运行Java程序

    Java教程经过上节的操作已经配置完了 Java 的开发环境,但并不清楚所配置的开发环境是否真的可以运行 Java 应用程序.为了解除这个疑虑,也为了使读者对开发 Java 应用程序的步骤有一个初步的 ...

最新文章

  1. 我的世界服务器怎么显示腐竹来了,我的世界腐竹开服必看manu权限组教程
  2. 华为正式宣布鸿蒙,空欢喜一场?华为正式宣布,鸿蒙系统用作他用
  3. 网上书店例子(JSP和JavaBean)
  4. java xml date_W3C XML 模式时间数据类型与java Date进行转换
  5. 对命令行程序调用及其结果显示的一点补充
  6. 9.27 csp-s模拟测试53 u+v+w
  7. idea中npm安装总结与node-sass依赖安装等常见问题避坑总结
  8. 使用Prometheus监控Flink
  9. windows 无法停止ics_x64仿真功能加入 ARM版Windows即将获得大量的应用程序
  10. dorado 7 使用总结
  11. 【转载】HTML之表单的设计(十)
  12. ubuntu 使用 fdisk 磁盘分区
  13. 编码原则 之 Separation of Concerns
  14. Markdown 4 印象笔记之马克飞象
  15. 代码三行,情书一封,程序员的表白必杀技了解一下
  16. md5sum命令的灵活运用
  17. Codeforces Round #818 (Div. 2)
  18. Flink MiniBatch的作用
  19. metaspolit提示Exploit failed: You must select a target.
  20. SQL实现排序,并输出序号

热门文章

  1. 雨滴win7计算机路径,win7系统设置雨滴桌面(Rainmeter)开机自启动的操作方法
  2. 《完全写作指南》随笔
  3. 开源应用中心 | KodExplorer高效流畅云端存储协同办公新体验
  4. 华三交换机上传文件和删除文件
  5. JS 获取当前页面url(不含参数)
  6. 系统架构设计-企业信息化战略与实施 知识点
  7. 智能水表营收管理系统
  8. mysql处理微信表情
  9. python发送验证码通知短信(互亿无线)
  10. QT QDir(获取当前路径下的所有文件)