溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中二叉排序樹的示例分析

發(fā)布時間:2022-01-17 11:13:17 來源:億速云 閱讀:140 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了java中二叉排序樹的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

     二叉排序樹:BST: (Binary Sort(Search) Tree), 對于二叉排序樹的 任何一個非葉子節(jié)點(diǎn),要求 左子節(jié)點(diǎn)的值比當(dāng)前節(jié)點(diǎn)的值小, 右子節(jié)點(diǎn)的值比當(dāng)前節(jié)點(diǎn)的值大。

    特別說明: 如果有相同的值,可以將該節(jié)點(diǎn)放在左子節(jié)點(diǎn)或右子節(jié)點(diǎn)。

    比如針對前面的數(shù)據(jù){7, 3, 10, 12, 5, 1, 9} ,對應(yīng)的二叉排序樹為 :

java中二叉排序樹的示例分析

    代碼實(shí)現(xiàn):

package tree;

public class BinarySortTreeDemo {

	public static void main(String[] args) {
		int[] arr= {7,3,10,12,5,1,9,2};
		BinarySortTree binarySortTree = new BinarySortTree();
		for (int i = 0; i < arr.length; i++) {
			binarySortTree.add(new Node(arr[i]));
		}
		binarySortTree.infixOrder();
	}
}
//創(chuàng)建二叉樹
class BinarySortTree{
	private Node root;
	public Node getRoot() {
		return root;
	}
	public void add(Node node) {
		if(root == null) {
			this.root = node;//如果root為空直接讓root指向node
		}else {
			this.root.add(node);
		}
	}
	// 中序遍歷
	public void infixOrder() {
		if(root!=null) {
			root.infixOrder();
		}else {
			System.out.println("二叉樹為空,不能遍歷");
		}
	}
}
//創(chuàng)建結(jié)點(diǎn)
class Node{
	 private int value;
	 private Node left;
	 private Node right;
	 public Node(int value) {
		 this.value = value;
	 }
	 @Override
	public String toString() {
		return "Node [value=" + value + "]";
	}

	//添加結(jié)點(diǎn)的方法,遞歸的形式添加結(jié)點(diǎn),注意需要滿足二叉樹的要求
	 public void add(Node node) {
		 if(node==null) {
			 return;
		 }
	//判斷傳入的結(jié)點(diǎn)的值,和當(dāng)前子樹的根節(jié)點(diǎn)的值比較
		 if(node.value<this.value) {
			 if(this.left==null) {//如果當(dāng)前結(jié)點(diǎn)左子結(jié)點(diǎn)為null
				 this.left= node;
			 }else {
				 //遞歸的向左子樹添加
				 this.left.add(node);
			 }
		 }else {//添加的結(jié)點(diǎn)的值大于當(dāng)前結(jié)點(diǎn)的值
			 if(this.right==null) {
				 this.right=node;
			 }else {
				 //遞歸的向右子樹添加
				 this.right.add(node);
			 }
		 }
	 }
	 //中序遍歷
	 public void infixOrder() {
		 if(this.left != null) {
			 this.left.infixOrder();
		 }
		 System.out.println(this);
		 if(this.right!=null) {
			 this.right.infixOrder();
		 }
	 }
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“java中二叉排序樹的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI