java編寫二叉樹以及前序遍歷、中序遍歷和後序遍歷
阿新 • • 發佈:2019-01-08
/** * 實現二叉樹的建立、前序遍歷、中序遍歷和後序遍歷 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All right reserved * created on 2014-9-9 下午2:34:15 **/ public class BinTreeInt { private Node root; /** * 建立內部節點類 **/ private class Node{ // 左節點 private Node leftChild; // 右節點 private Node rightChild; // 節點對應的值 private int data; public Node(int data){ this.leftChild = null; this.rightChild = null; this.data = data; } }// class Node public BinTreeInt(){ root = null; } /* *遞迴的建立二叉樹 * */ public void buildTree(Node node ,int data){ if (root == null){// 如果根節點為空,建立根節點 root = new Node(data); }else{ if(data <node.data){//插入到左子樹 if(node.leftChild == null){//左節點為空,直接建立值為data的左節點 node.leftChild = new Node(data); }else{//左節點不為空,呼叫buildTree函式插到左子樹中 buildTree(node.leftChild,data); } }else{ if(node.rightChild == null){ node.rightChild = new Node(data); }else{ buildTree(node.rightChild,data); } } } }//end buildTree /* *前序遍歷二叉樹 * */ public void preOrder(Node node){ if(node != null){ System.out.print(node.data); preOrder(node.leftChild); preOrder(node.rightChild); } } /* *中序遍歷二叉樹 * */ public void inOrder(Node node){ if(node != null){ inOrder(node.leftChild); System.out.print(node.data); inOrder(node.rightChild); } } /* *後序遍歷二叉樹 * */ public void postOrder(Node node){ if(node != null){ postOrder(node.leftChild); postOrder(node.rightChild); System.out.print(node.data); } } public static void main(String ars[]){ int[] a={2,4,12,45,21,6,111}; BinTreeInt binTree = new BinTreeInt(); for(int i = 0; i<a.length; i++){ binTree.buildTree(binTree.root, a[i]); } System.out.print("前序遍歷"); binTree.preOrder(binTree.root); System.out.println(""); System.out.print("中序遍歷"); binTree.inOrder(binTree.root); System.out.println(""); System.out.print("後序遍歷"); binTree.postOrder(binTree.root); } }