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工具网。
推荐阅读: