java代碼構建一棵二叉樹(二叉查找樹)

首先,是關於二叉樹的定義,我在這闡述一下,避免還有些朋友不知道java

二叉樹是N個結點的有限集合,該集合或者爲空集,或者由一個根節點跟兩棵互不相交的、分別稱爲根節點的左子樹或者右子樹的二叉樹組成,node

 

二叉樹有如下幾個特色數組

1:每一個結點最多有兩個子樹數據結構

2:左子樹跟右子樹是有序的函數

3:及時樹中某個結點只有一棵子樹,也要區分是左子樹仍是右子樹測試

 

二叉樹有如下幾個形態:ui

1:空二叉樹this

2:只有一個根結點spa

3:根結點只有左子樹debug

4:根結點只有右子樹

5:根結點既有左子樹,又有右子樹

 

 

以上,是摘自 大話數據結構對二叉樹的描述,

 

------------------------------------我是分割線----------------------------------

 

如下是二叉樹的常見結構,只大概列舉一下,二叉樹的邏輯關係

 

 

 

說完二叉樹的邏輯關係,下面咱們說下,二叉樹的存儲結構,下面咱們只介紹二叉鏈表存儲

由於二叉樹的每一個結點最多有兩個孩子,因此咱們爲它設計一個數據域跟兩個指針域,兩個指針域分別表示左結點跟右節點,下面是結構示意圖

 

 

 

結構圖有了,剩下的,咱們就是將結構圖轉換爲代碼

 

public class BinaryTree {

	//根結點,默認爲null
	private Node root = null;

	public Node getRoot() {
		return root;
	}

	//經過內部類,構建結點
	private class Node{
		//左節點
		private Node left;
		//數據域
		private int data;
		//右節點
		private Node right;

		public Node(int data) {
			this.data = data;
		}

		public Node getLeft() {
			return left;
		}

		public void setLeft(Node left) {
			this.left = left;
		}

		public int getData() {
			return data;
		}

		public void setData(int data) {
			this.data = data;
		}

		public Node getRight() {
			return right;
		}

		public void setRight(Node right) {
			this.right = right;
		}
	}


	/**
	 * 建立人:賀小五
	 * 建立時間:2017-09-16 00:54:52
	 * 描述:
	 * 		構建二叉樹
	 * 	    Node 爲結點,
	 * 	    data 爲數據
	 */
	private void buildBiTree(Node node,int data){
		//若是根結點是空,那麼設置根結點,而且設置數據域
		if(root == null){
			root = new Node(data);
		}else{
			/**
			 * 根結點不爲空,那麼判斷數據是否小於當前結點的數據
			 */
			if(data<node.getData()){
				//若是小於,判斷當前結點是否有左葉子結點
				if(node.getLeft()==null){
					//左葉子結點爲空,設置左葉子結點,而且設置數據
					node.setLeft(new Node(data));
				}else{
					//左葉子結點不爲空,遞歸調用構建二叉樹的函數
					buildBiTree(node.getLeft(),data);
				}
			}else{
				//若是大於或等於,判斷當前結點是否存在右葉子結點
				if(node.getRight()==null){
					//右葉子結點爲空,設置右葉子結點,而且設置數據域
					node.setRight(new Node(data));
				}else{
					//右葉子幾點不爲空,遞歸調用構建二叉樹的函數
					buildBiTree(node.getRight(),data);
				}
			}
		}
	}

	/**
	 * 建立人:賀小五
	 * 建立時間:2017-09-16 01:01:30
	 * 描述:
	 * 		建立二叉樹函數
	 * 		int[] 是個int類型的數組
	 * 		經過循環調用,往二叉樹插入數據
	 */
	public static BinaryTree createBiTree(int[] datas){
		BinaryTree binaryTree = new BinaryTree();
		for (int data : datas) {
			binaryTree.buildBiTree(binaryTree.getRoot(),data);
		}

		return binaryTree;
	}
}

 

以上就是構建一個普通二叉樹的代碼,根結點的左葉子結點會小於根結點,右葉子結點反之,

而後咱們上一段測試代碼,往該樹插入數據,

 

public static void main(String[] args) {

		int[] datas = {72,37,29,55,51,80};


		BinaryTree biTree = BinaryTree.createBiTree(datas);

	}

 

 

執行測試代碼後,結構應該是以下圖(測試的同窗能夠debug 看樹的結構)

 

 

以上就是構建一個二叉樹的代碼,很簡單,下篇分享一下二叉樹的遍歷

 

 

 

到這,文章就結束了!

以上,均爲本人我的理解,比較簡單的理解,或許跟各位看官理解的有出入,歡迎指正交流

歡迎轉載,請註明出處跟做者,謝謝!

相關文章
相關標籤/搜索