首先,是關於二叉樹的定義,我在這闡述一下,避免還有些朋友不知道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); }
以上就是構建一個二叉樹的代碼,很簡單,下篇分享一下二叉樹的遍歷
到這,文章就結束了!
以上,均爲本人我的理解,比較簡單的理解,或許跟各位看官理解的有出入,歡迎指正交流
歡迎轉載,請註明出處跟做者,謝謝!