java 二叉树转数组_java二叉树怎么转成数组?java怎么实现二叉树?
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怎么实现二叉树?相关推荐
- java字符串转公式_java把字符串转化成公式计算的示例
java把字符串转化成公式计算的示例 如下所示: static ScriptEngine jse = new ScriptEngineManager().getEngineByName("J ...
- java怎么复制动态数组_Java 数组排序复制等操作(Java Arraycopy)
//手机终端 请上下左右 滑动屏幕 观看更全! //package Main; public class Arraycopy { public static void main(String[] ar ...
- java 传参字符串数组_JAVA语言之okhttp传递数组参数
比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常. 解决办法:定义一个对象继承自okhttp3.RequestBody public class DefaultRequestBody ...
- java 申请不定长度数组_java中申请不定长度数组ArrayList的方法
如下所示: import java.util.ArrayList; //java中申请不定长度数组 public class Test01 { public static void main(Stri ...
- java new数组_Java如何使用new创建数组
java语言使用new操作符来创建数组,语法如下: arrayRefVar = new dataType[arraySize]; 上面的语法语句做了两件事: 一.使用dataType[arraySiz ...
- java不等长二维数组_Java中关于二维数组的理解与使用
今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...
- java char 动态数组_Java程序来填充char数组中的元素
可以使用java.util.Arrays.fill()方法将元素填充到char数组中.此方法将所需的char值分配给Java中的char数组.所需的两个参数是数组名称和要存储在数组元素中的值. 演示此 ...
- java 7个数排序_JAVA基础(7)-数组的排序
数组的排序 冒泡排序的基本思想: 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放 ...
- java什么是局部变量_java局部变量是什么意思?Java中局部变量与成员变量有哪些区别?...
大家知道Java中的局部变量吗?今天我们要了解的Java的局部变量及它和成员变量的区别,一起来看看吧. 什么是局部变量? 局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能 ...
- java记事本应用程序_Java教程:使用记事本编写运行Java程序
Java教程经过上节的操作已经配置完了 Java 的开发环境,但并不清楚所配置的开发环境是否真的可以运行 Java 应用程序.为了解除这个疑虑,也为了使读者对开发 Java 应用程序的步骤有一个初步的 ...
最新文章
- 我的世界服务器怎么显示腐竹来了,我的世界腐竹开服必看manu权限组教程
- 华为正式宣布鸿蒙,空欢喜一场?华为正式宣布,鸿蒙系统用作他用
- 网上书店例子(JSP和JavaBean)
- java xml date_W3C XML 模式时间数据类型与java Date进行转换
- 对命令行程序调用及其结果显示的一点补充
- 9.27 csp-s模拟测试53 u+v+w
- idea中npm安装总结与node-sass依赖安装等常见问题避坑总结
- 使用Prometheus监控Flink
- windows 无法停止ics_x64仿真功能加入 ARM版Windows即将获得大量的应用程序
- dorado 7 使用总结
- 【转载】HTML之表单的设计(十)
- ubuntu 使用 fdisk 磁盘分区
- 编码原则 之 Separation of Concerns
- Markdown 4 印象笔记之马克飞象
- 代码三行,情书一封,程序员的表白必杀技了解一下
- md5sum命令的灵活运用
- Codeforces Round #818 (Div. 2)
- Flink MiniBatch的作用
- metaspolit提示Exploit failed: You must select a target.
- SQL实现排序,并输出序号