数据结构 -- 二叉树的学习(二)

数据结构 -- 二叉树的学习(二)

 

用数组来实现二叉树

       首先,先看一下树的形状:

         该树如何存储在数组中呢?有没有规律呢?

        请直接看数组的存放状态:

        由上面的一维数组可以看出,树与一维数组的关系如下:

        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();
    }
}

      算法结果:

原始数据为:
6 3 5 9 7 8 4 2
二叉树的内容:
0 6 3 9 2 5 7 0 0 0 4 0 0 8 0 0

Process finished with exit code 0

 

      通常以数组表示法来存储二叉树,越接近满二叉树越节省空间,极端的情况下只有左子树或只有右子树则是最浪费空间的。另外在改基础上要是对元素进行增删数据较麻烦,必须重新建立二叉树。

 

posted @ 2021-10-30 15:55  心向未来  Views(20)  Comments(0)    收藏  举报