国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實現動態表查找--二叉排序樹

2019-11-06 07:41:38
字體:
來源:轉載
供稿:網友

定義

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的鍵值均小于或等于它的根結點的鍵值; (2)若右子樹不空,則右子樹上所有結點的鍵值均大于或等于它的根結點的鍵值; (3)左、右子樹也分別為二叉排序樹;如下圖:

樹的遍歷方法:

(1)層次遍歷:按照樹的層次進行遍歷,如圖樹:8、3、10、1、6、14、4、7、13(2)先序遍歷:節點遍歷順序為當前節點、左節點、右節點。如圖樹:8、3、1、6、4、7、10、14、13(3)中序遍歷:節點遍歷順序為左節點、當前節點、右節點。如圖樹:1、3、4、6、7、8、10、13、14(4)后續遍歷:節點遍歷順序為左節點、右節點、當前節點。如圖樹:1、4、7、6、3、8、13、14、10從二叉排序樹的中序遍歷可以看出它是一個遞增的有序表。下面一段程序代碼主要實現以下功能:二叉排序樹的建立,插入,查詢,四種遍歷:

代碼實現:

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);	}}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康保县| 江安县| 共和县| 临湘市| 玉溪市| 诏安县| 万州区| 利辛县| 江永县| 伊春市| 尚义县| 塘沽区| 二连浩特市| 自贡市| 南充市| 景德镇市| 湘潭市| 辽阳市| 西安市| 镇江市| 肃南| 阳谷县| 徐水县| 澄迈县| 南投县| 江源县| 南溪县| 南木林县| 南召县| 平南县| 聂荣县| 平陆县| 庆元县| 茶陵县| 琼海市| 黑龙江省| 无锡市| 正宁县| 平阴县| 旬阳县| 泰州市|