java實現簡單的二叉樹
阿新 • • 發佈:2019-01-24
二叉排序樹,平衡二叉樹,紅黑樹都是在普通二叉樹的基礎上構建的,所以很有必要學習一下二叉樹。
二叉樹的遍歷:
1:先序遍歷(DLR)
1):訪問根節點;
2):按先序遍歷訪問左子樹
3):按先序遍歷訪問右子樹
2:中序遍歷(LRD)
1):按中序遍歷左子樹
2):訪問根節點
3):按中序遍歷訪問右子樹
3:後序遍歷
1):按後序遍歷訪問左子樹
2):按後序遍歷訪問右子樹
3):訪問根節點
先序遍歷的結果為:0 1 3 7 4 2 5 6
中序遍歷的結果為:7 3 1 4 0 5 2 6
後序遍歷的結果為:7 3 4 1 5 6 2 0
java程式碼實現:
BinTree類
public class BinTree { private BinTree lChild;//左孩子 private BinTree rChild;//右孩子 private BinTree root;//根節點 private Object data; //資料域 private List<BinTree> datas;//儲存所有的節點 public BinTree(BinTree lChild, BinTree rChild, Object data) { super(); this.lChild = lChild; this.rChild = rChild; this.data = data; } public BinTree(Object data) { this(null, null, data); } public BinTree() { super(); } public void createTree(Object[] objs){ datas=new ArrayList<BinTree>(); for (Object object : objs) { datas.add(new BinTree(object)); } root=datas.get(0);//將第一個作為根節點 for (int i = 0; i < objs.length/2; i++) { datas.get(i).lChild=datas.get(i*2+1); if(i*2+2<datas.size()){//避免偶數的時候 下標越界 datas.get(i).rChild=datas.get(i*2+2); } } } //先序遍歷 public void preorder(BinTree root){ if(root!=null){ visit(root.getData()); preorder(root.lChild); preorder(root.rChild); } } //中序遍歷 public void inorder(BinTree root){ if(root!=null){ inorder(root.lChild); visit(root.getData()); inorder(root.rChild); } } //後序遍歷 public void afterorder(BinTree root){ if(root!=null){ afterorder(root.lChild); afterorder(root.rChild); visit(root.getData()); } } private void visit(Object obj) { System.out.print(obj+" "); } public Object getData() { return data; } public BinTree getRoot() { return root; } }
測試類:
public class TestTree { public static void main(String[] args) { BinTree binTree=new BinTree(); Object[] objs={0,1,2,3,4,5,6,7}; binTree.createTree(objs); // binTree.preorder(binTree.getRoot()); 先序遍歷 // binTree.inorder(binTree.getRoot()); 中序遍歷 binTree.afterorder(binTree.getRoot()); //後序遍歷 } }