樹結構入門總結貼
阿新 • • 發佈:2020-08-11
package com.example.binarytreedemo; import java.util.Arrays; /** * @Author: zhangQi * @Date: 2020-08-11 17:22 * @Description * 完全二叉樹的線性儲存 */ public class FullBinaryTree { private Object[] arr; private int size; //gouzaoqi Construct initialize the parameters FullBinaryTree(int capacity){ this.arr = new Object[capacity+1]; this.size = 0; } public int getSize(){ return this.size; } public boolean isEmpty(){ return this.size == 0; } public void add(Object e,int index){ assert index <= this.arr.length; this.arr[index] = e; this.size ++; } @Override public String toString(){ return "FullBinaryTree{" + "arr=" + Arrays.toString(arr) + ", size=" + size + '}'; } public static void main(String[] args) { FullBinaryTree fullBinaryTree = new FullBinaryTree(26); //存入26個字母 從下標1開始 for (Character c = 'A';c<='Z';c++){ fullBinaryTree.add(c,c-'A'+1); } System.out.println(fullBinaryTree.toString()); } }
輸出
FullBinaryTree{arr=[null, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z], size=26}
完全二叉樹的線性儲存
package com.example.binarytreedemo; import java.util.ArrayList; /** * @Author: zhangQi * @Date: 2020-08-11 17:31 * @De * 完全二叉樹的建立與遍歷 */ public class BinaryTree { //結點 private Node root; //結點數 private int size; //存放結點 private ArrayList<Node> list; public BinaryTree(){ this.root = null; this.size = 0; this.list = new ArrayList<>(); } public void createTree(Object[] array){ for (int i=0;i<array.length;i++){ Node node = new Node(array[i]); list.add(node); if(this.root==null){ this.root = node; } } if(list.size()>0){ //分佈到兩處結點上 屬於一個父結點 ? for(int i=0;i<array.length/2;i++){ if(2*i+1<list.size()){ list.get(i).left=list.get(2*i+1); } if(2*i+2<list.size()){ list.get(i).right=list.get(2*i+2); } } } } //前序遍歷 public void preOrder(Node root){ if(root==null){ return; }else{ System.out.print(root.getData()+" "); } preOrder(root.left); preOrder(root.right); } public Node getRoot(){ return root; } public static void main(String[] args) { BinaryTree binaryTree = new BinaryTree(); Character[] array = {'A','B','C','D','E','F','G','H','I','J','K','L', 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; binaryTree.createTree(array); binaryTree.preOrder(binaryTree.getRoot()); } }
輸出
A B D H P Q I R S E J T U K V W C F L X Y M Z G N O
完全二叉樹的建立與遍歷