バイナリツリーのデータ構造(2つ):バイナリツリーの順次保存
概念:
データストレージの観点から、バイナリツリーのシーケンシャルストレージとは、アレイストレージ方式とツリーストレージ方式を相互に変換できること、つまり、アレイをツリーに変換できること、およびツリーをアレイに変換できることを意味します。
たとえば、次の図:(
通常、順次バイナリツリーは完全なバイナリツリーのみを考慮します)
上の図から、配列の添え字がツリーノードの番号に対応していることがわかります。バイナリツリーのn番目のノードの
左側のサブツリーのノード番号は2n + 1
、バイナリツリーのn番目のノードの右側のサブツリーのノード番号は2 n + 2、バイナリツリーのn番目のノードの親ノードのノード番号(n-1)/ 2です。
配列をバイナリツリーに変換する簡単な実装:
public class ArrayBinaryTreeDemo {
public static void main(String[] args) {
int arr[]= {
1,2,3,4,5,6,7};
ArrayBinaryTree abTree=new ArrayBinaryTree(arr);
abTree.preShow(0);
}
}
class ArrayBinaryTree{
int arr[];
public ArrayBinaryTree(int arr[]) {
this.arr=arr;
}
//将数组转换为树后的前序遍历,index为数组下标
public void preShow(int index) {
if(arr==null||arr.length==0) {
System.out.println("数组为空,转换树失败");
}
System.out.println(arr[index]);
if((2*index+1)<arr.length) {
preShow(2*index+1);
}
if((2*index+2)<arr.length) {
preShow(2*index+2);
}
}
}
プレオーダートラバーサル結果の出力: