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怎么实现二叉树?

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

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

java 二叉树转数组_java二叉树怎么转成数组?java怎么实现二叉树?_第1张图片

为了实现二叉树,我们使用一个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,二叉树转数组)