数据结构 -- 二叉树的学习(二)
数据结构 -- 二叉树的学习(二)
用数组来实现二叉树
首先,先看一下树的形状:

该树如何存储在数组中呢?有没有规律呢?
请直接看数组的存放状态:

由上面的一维数组可以看出,树与一维数组的关系如下:
1、左子树的索引值是父节点索引值的2倍
2、右子树的索引值是父节点索引值的2倍+1
在一维数组建立二叉树的实例中,实际就是建立了一颗二叉查找树。这是一种很好的排序应用模式。
二叉查找树的特点:
1、可以是空集合、若不是空集合,则结点上一定要有一个键值。
2、每一个树根的值都需要大于左子树的值。
3、每一个树根的值都必须小于右子树的值。
4、其每一个树根的左右子树也是二叉查找树。
5、树的每一个结点值都不相同。
建立过程:
比如一个数组:[32,25,16,35,27]

一维数组建立二叉查找树的算法:
public class Demone7 { public static void main(String[] args) { int[] arrary = new int[]{6,3,5,9,7,8,4,2};//原始数据 int[] bt = new int[16]; System.out.println("原始数据为:"); for (int i = 0; i < arrary.length; i++) { System.out.print(arrary[i] + "\t"); } System.out.println(); int level = 0; for (int i = 0; i < arrary.length; i++) { for (level = 1; bt[level] != 0;) { if (arrary[i] > bt[level]) { level = level * 2 + 1; } else { level = level * 2; } } bt[level] = arrary[i]; } System.out.println("二叉树的内容:"); for (int i = 0; i < bt.length; i++) { System.out.print(bt[i] + "\t"); } System.out.println(); } }
算法结果:
|
原始数据为: Process finished with exit code 0 |
通常以数组表示法来存储二叉树,越接近满二叉树越节省空间,极端的情况下只有左子树或只有右子树则是最浪费空间的。另外在改基础上要是对元素进行增删数据较麻烦,必须重新建立二叉树。

浙公网安备 33010602011771号