当前位置: 首页 > 后端技术 > Java

Java版顺序存储二叉树

时间:2023-04-01 23:16:54 Java

PS:本文为转载文章,原文可读性会更好,文末有原文链接树的存储方式可以相互转换,即数组可以转换为树,树也可以转换为数组;我们这里说的顺序存储二叉树通常是完全二叉树,所以如果我们要顺序存储普通二叉树,就需要提前将普通二叉树转换为完全二叉树;完全二叉树的定义可以看Java版数据结构与算法(3)一文;二叉树的顺序存储是指使用顺序表(数组)来存储一棵二叉树,完整二叉树的顺序存储,只需要从根节点开始,将树中的节点存储在根据层次结构的数组;好吧,我们来画一棵可以顺序存储的二叉树,如图1所示:图片注:白色的数字代表节点的值,蓝色的数字代表节点的编号。“二叉树的顺序存储是指使用顺序表(数组)来存储一棵二叉树。完整二叉树的顺序存储只需要从根节点开始,将树中的节点存储在一个按等级排列。”你怎么理解这句话??以图1中的完整二叉树为例。如果我们用一个数组来存储这个二叉树,那么数组的元素存储为array={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},看,白色的数字作为数组的元素,蓝色的数字作为数组的下标。如果根节点所在的层为第一层,根节点的子节点为第一层,则该数组先存储第一层,再存储第二层,再存储下一层,以此类推,最终数组中存储的元素是顺序遍历的,这时候你应该看懂双引号里面的文字了吧。顺序存储二叉树具有以下特点:注:n表示二叉树中元素的个数(n从0开始计数,不能小于0,n还表示节点编号,如图1)1)顺序二叉树通常只考虑完全二叉树。2)第n个元素的左子节点为2*n+1。3)第n个元素的右子节点为2*n+2。4)第n个元素的父节点为(n-1)/2。这里我们用代码实现一个:即把二叉树的节点按照图1中的顺序存储在一个数组中,然后按照一定的规则输出数组元素,同样实现了前序遍历和in-图1二叉树的序遍历和后序遍历;二叉树的遍历见Java版数据结构与算法(4)这篇文章。(1)写一个类ArrayBinaryTree,将数组转化为二叉树遍历(前序、中序、后序):publicclassArrayBinaryTree{privateint[]array;//存放数据节点的数组publicArrayBinaryTree(int[]array){this.array=array;}publicvoidpreOrder(){preOrder(0);}//将数组的输出顺序转换为对应二叉树的前序遍历privatevoidpreOrder(intindex){if(array==null||array.length==0){System.out.println("数组为空,无法进行二叉树的前序遍历");返回;}//输出当前元素System.out.println(array[index]);//左递归遍历if(index*2+1