Java實現動態表查詢--二叉排序樹
package yao.demo; import java.util.*; //二叉樹的定義 class BinaryTree{ int val; BinaryTree left; BinaryTree right; public BinaryTree(int val){ this.val = val; } } /** * @author leo * @param f 如果在查詢的過程中,查詢成功,則f指向查詢成功的節點;如果查詢失敗,f指向查詢路徑上的最後一個節點,也即待插入節點 * @param root 指向二叉排序樹的根節點 */ public class BinarySortTree { static BinaryTree f; static BinaryTree root; //二叉排序樹的建立 public static void createBST(BinaryTree root, int key){ BinaryTree newNode = new BinaryTree(key); if(key > root.val){ if(root.right == null) root.right = newNode; else createBST(root.right, key); } else if(key < root.val){ if(root.left == null) root.left = newNode; else createBST(root.left, key); } else{ System.out.println("The node " + key + " is already exists"); return; } } //二叉排序樹的查詢 //如果查詢成功,則f指向查詢成功的節點;如果查詢失敗,f指向查詢路徑上的最後一個節點,也即待插入節點 public static boolean sort(BinaryTree root, int key, BinaryTree p){ if(root == null){ f = p; System.out.println("查詢失敗!"); return false; } else if(root.val == key){ f = root; System.out.println("查詢成功!"); return true; } else if(root.val >= key) return sort(root.left, key, root); else return sort(root.right, key, root); } //二叉排序樹的插入 public static void insert(BinaryTree rt, int key){ if(sort(root, 100, null) == false){ BinaryTree newNode = new BinaryTree(100); if(f == null) root = newNode; else if(key > f.val) f.right = newNode; else f.left = newNode; System.out.println("插入成功!"); return; } System.out.println("不允許插入重複元素!"); } //二叉樹的先序遍歷 public static void preOrder(BinaryTree rt){ if(rt != null){ System.out.print(rt.val + " "); preOrder(rt.left); preOrder(rt.right); } } //二叉樹的中序遍歷 public static void inOrder(BinaryTree rt){ if(rt != null){ inOrder(rt.left); System.out.print(rt.val + " "); inOrder(rt.right); } } //二叉樹的後序遍歷 public static void postOrder(BinaryTree rt){ if(rt != null){ postOrder(rt.left); postOrder(rt.right); System.out.print(rt.val + " "); } } //二叉樹的層次遍歷 //用佇列實現 public static void levelOrder(BinaryTree rt){ if(rt == null) return; Queue<BinaryTree> queue = new LinkedList<BinaryTree>(); queue.add(rt); while(!queue.isEmpty()){ BinaryTree temp = queue.remove(); System.out.print(temp.val + " "); if(temp.left != null) queue.add(temp.left); if(temp.right != null) queue.add(temp.right); } } public static void main(String[] args) { int[] array = {35, 76, 12, 22, 16, 48, 90, 46, 9, 40}; root = new BinaryTree(array[0]); for(int i = 1; i < array.length; i++){ createBST(root, array[i]); } System.out.println(sort(root, 22, null)); System.out.println(sort(root, 100, null)); insert(root, 100); System.out.print("先序遍歷:"); preOrder(root); System.out.println(); System.out.print("中序遍歷:"); inOrder(root); System.out.println(); System.out.print("後序遍歷:"); postOrder(root); System.out.println(); System.out.print("層次遍歷:"); leverOrder(root); } }
相關推薦
Java實現動態表查詢--二叉排序樹
package yao.demo; import java.util.*; //二叉樹的定義 class BinaryTree{ int val; BinaryTree left; BinaryTree right; public BinaryTree(int val){ this.val = v
有序表,二叉排序樹,二叉平衡樹平均查詢長度比較例題 && 二叉平衡樹的高度
【說明】:部落格內容選自課程課件 已知長度為12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) 要求完成以下操作: 1.若對錶中元素先進行排序(字典序),構成有序表,並求其在等概率的情況
Java版資料結構之二叉排序樹
簡介 新增結點 查詢結點 刪除結點 程式碼實現 public class MyBinarySortTree { int data;//結點權值 MyBinarySortTree leftTree;//左子樹 MyBinarySort
基於樹的查詢(二叉排序樹、平衡二叉樹、B樹、B+樹、伸展樹和紅黑樹)
本文主要介紹幾種比較重要的樹形結構: ① 二叉排序樹 ② 平衡二叉樹 ③ B樹 ④ B+樹 ⑤ 伸展樹 ⑥ 紅黑樹 分為三個問題來描述每種樹: ① 是什麼?主要應用? ② 有什麼特點(性質)? ③ 基於它的操作?
查詢-二叉排序樹查詢
二叉排序樹的性質: (1)若某節點的左子樹非空,則左子樹上所有元素的值都小於該元素的值。 (2)若某節點的右子樹非空,則右子樹上所有元素的值都大於該元素的值。 問題:在二叉排序樹種,原則上各元素關
java實現順序查詢、二分查詢、雜湊表查詢、二叉排序樹查詢
順序查詢、二分查詢、雜湊表查詢、二叉排序樹查詢這幾種查詢演算法是面試中常被問到的幾種演算法。 1. 順序查詢 對於陣列,按順序比較給定的值,時間複雜度0(n),,以下是實現: public static int Linear_Search(int[] data, i
Java實現二叉排序樹的插入、查詢、刪除
import java.util.Random; /** * 二叉排序樹(又稱二叉查詢樹) * (1)可以是一顆空樹 * (2)若左子樹不空,則左子樹上所有的結點的值均小於她的根節點的值 * (3)若右子樹不空,則右子樹上所有的結點的值均大於她的根節點的值
二叉排序樹(Binary Sort Tree)查詢、插入、刪除 Java實現
順序儲存的插入和刪除可以通過在表末端插入和刪除元素同最後一個元素互換來保持高效率,但是無序造成查詢的效率很低。 如果查詢的資料表是有序線性表,並且是順序儲存的,查詢可以折半、插值、斐波那契等查詢演算法來實現,但是因為有序在插入和刪除操作上,就需要耗費大量時間。 二叉排序樹可
java實現平衡二叉排序樹增刪
在學習了普通二叉排序樹的演算法之後,我們發現了它的一些不足,如果我們的普通二叉樹在插入資料的時候造成樹的一側資料過多的話,就會使得查詢的時候效率大大降低,在極端情況下,我們插入一串有序的數,原本的二叉樹就會變成連結串列,例如,插入:1,2,3,4,5,6,結果就會變成下圖這樣: 這樣就
二叉排序樹查詢演算法之php實現
二叉排序樹,又稱為二叉查詢樹。它或者是一棵空樹,或者是具有下列性質的二叉樹。 1.若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2.若它的右子樹不空,則右子樹上所有結點的值均小於它
Java理解實現二叉排序樹
Java實現二叉排序樹 要求: 實現二叉排序樹,包括生成、插入,刪除,深度 對二叉排序樹進行先根、中根、和後根非遞迴遍歷 每次對樹的修改操作和遍歷操作的顯示結果都需要在螢幕上用樹的形狀表示出來 結點類: public class Node { public
二叉樹基礎操作 ,前中後序遍歷,求二叉樹高度,二叉搜尋樹(二叉排序樹)Java實現 程式碼集合
首先,定義一個樹類Tree.java public class Tree { public TreeNode root; } 定義樹節點類TreeNode.java public class TreeNode { public TreeNode(int
二叉查詢樹(二叉排序樹)的詳細實現
1、序 詳細實現了二叉查詢樹的各種操作:插入結點、構造二叉樹、刪除結點、查詢、 查詢最大值、查詢最小值、查詢指定結點的前驅和後繼 2、二叉查詢樹簡介 它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根
用java構建二叉排序樹,實現先序,中序和後序遍歷
1.基礎知識: 先上圖,舉個例子: 先選遍歷的規則:根節點----左子樹----右子樹 結果為12-9-76-35-22-16-48-46-40-90 中序遍歷的規則:左子樹--
Java實現二叉排序樹
定義: 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值; (3)左、右子樹也分別為二叉排序樹; (4)沒有鍵值相等的節
Java查詢演算法(四): 二叉排序樹
[ 為什麼使用二叉排序樹 ] 如果查詢的資料集是有序線性表,並且是順序儲存的,查詢可以用折半、插值等查詢演算法來實現,但是因為有序,在插入和刪除操作上,需要耗費大量的時間。 因為二叉排序樹使用連結的方式儲存,在執行插入或刪除操作時不用移動元素,所以插入刪除的時間效能
二叉排序樹,java實現(知識簡單的實現,持續完善更新)
定義: 二叉排序樹就是左子樹都比節點小,右子樹都比節點大。簡單的排序二叉樹實現。 程式碼: package com.wzq.data_structure; public class Bina
二叉排序樹的java實現
最近在看JDK原始碼時,發現JDK的J.U.C包下面的很多類都用到了二叉排序樹和紅黑樹,就想著這一塊還是考研的時候看了的,順便就在理論基礎上覆習加用Java做個實現。 二叉排序樹 先來說說這個二叉排序樹的定義和性質: 定義:二叉排序樹或者
【資料結構樹表的查詢】二叉排序樹詳解和程式碼(生成、插入、查詢、最大值、最小值、刪除、中序遍歷、銷燬)
二叉排序樹(簡稱BST)又稱二叉查詢(搜尋)樹,其定義為:二叉排序樹或者是空樹,或者是滿足如下性質的二叉樹: (1)若它的左子樹非空,則左子樹上所有記錄的值均小於根記錄的值; (2)若它的右子樹非空,則右子樹上所有記錄的值均大於根記錄的值;
二叉排序樹的建立、插入、刪除、查詢、4種遍歷 C++完整實現
#include<iostream> #include<string> #include<queue> using namespace std; typedef int KeyType; #define NUM 13 class Bi