二叉排序樹介紹java
二叉排序樹又稱二叉查找樹(Binary Sort Tree / Binary Search Tree),簡單的說就是數據的存放要符合原則:左邊的節點要小於根節點,右邊的節點要大於根節點,儘可能避免相同(相同則左右放均可)。node
學習二叉排序樹,實現「」增刪改查「」都可以很高效率的完成。數組
實現思路:ide
一、建立結點Node(定義三個變量、一個添加方法、一箇中序遍歷方法(先後排序出來的 結果不是有序的))
二、建立二叉樹(定義一個根節點、添加添加方法、添加遍歷方法)
三、建立實例、循環遞歸添加數組、使用中序遍歷方法輸出post
測試代碼:學習
public class BinarySortTree { public static void main(String[] args) { // TODO Auto-generated method stub int arr [] = {2,5,3,7,4,8,9,1,0}; BinaryTree binaryTree = new BinaryTree(); //遞歸添加數組 for(int i = 0; i < arr.length; i++) { binaryTree.add(new TreeNode(arr[i])); } //遍歷輸出 System.out.println("中序遍歷輸出~~"); binaryTree.postOrder(); } } //建立二叉樹 class BinaryTree{ private TreeNode root; // public BinaryTree(Node root) { // this.root = root; // } //添加方法 public void add(TreeNode node) { if(root == null) { root = node; } else { this.root.add(node); } } //遍歷方法 public void postOrder() { if(root != null) { this.root.postOrder(); } else { System.out.println("二叉樹爲空,沒法遍歷排序"); } } } //建立節點 class TreeNode{ private int value; private TreeNode left; private TreeNode right; public TreeNode(int value) { this.value = value; } @Override public String toString() { return "TreeNode [value=" + value + "]"; } //添加方法 public void add(TreeNode node) { //判斷傳入的值和當前節點的值的關係 //若是傳入的值爲空,則直接返回 if(node == null) { return; } //若是傳入的值小於當前的值 if(node.value < this.value) { //判斷當前節點的左子數是否爲空,爲空則將小於當前節點的值放置在左節點 if(this.left == null) { this.left = node; //若當前節點的左子結點不爲空,則提櫃判斷左子樹 } else { this.left.add(node); } //若是傳入的值不小於當前的值,就表示大於或等於當前的值,則將其添加到當前節點的右邊 } else { if(this.right == null) { this.right = node; } else { this.right.add(node); } } } //後序遍歷 public void postOrder() { if(this.left != null) { this.left.postOrder(); } System.out.println(this); if(this.right != null) { this.right.postOrder(); } } }