1. 程式人生 > >數據結構 之 二叉樹

數據結構 之 二叉樹

rgs bdc treemap img AR system AI 節點 mini

對象由指針所構成的關系有很多種,如果沒有循環可以廣義稱為樹,否則稱為圖。

技術分享圖片

而二叉樹是一種特殊的樹形結構。常用與二叉樹排序的應用。 二叉樹的定義: 每個結點最多有兩個子樹的結構稱為二叉樹。所以兩個分叉可以分別稱為左子樹和右子樹 根節點:每棵樹中只有1個根節點 中間節點:有一個或兩個孩子 葉子節點:沒有子節點的節點 技術分享圖片 前序遍歷(先根序遍歷):原理 根——>左——>右 先訪問根節點,再訪問左子樹,在訪問右子樹 中序遍歷: 原理 左——>根——>右 先訪問左子樹,再訪問根節點,在訪問右子樹 後序: 原理 左——>右——>根 先訪問左子樹,再訪問右子樹,在訪問根節點 那麽上圖的前序遍歷 :ABCDEFGHK 中序遍歷:BDCAEHGKF 這裏後序就不寫了
重點舉例:中須遍歷 1、先訪問左子樹 所以先排序 BCD。 2、在BCD中 B節點為根節點 而不存在子節點 所以第一個就是B,而B的子節點是一棵樹,所以在此暫時不對C進行排序 3、當前C節點下有一個左葉子節點,按照(左根右)的排序規則,就應該是DC 那麽聯合B 目前的排序就是BDC 4、在中序遍歷中 先訪問左子樹 --->根節點----->右子樹的規則,第四個就是根節點A 目前BDCA 5、剩下EFGHK 這個節點組成的右子樹,第一個E根節點下只有右節點而右節點是一顆樹,所以只能排E這個節點 BDCAE 6、F節點是棵樹,而G作為F節點的左子節點也是顆樹 無法排序,繼續往下,H左葉子節點 OK就是它了 HGK 這個樹就排好了 7、剩下F 因為F作為根節點 排完左子樹後就排根節點,所以現在就是F HGKF 該節點沒有右子樹,所以將之前排序的合並 就是上面寫的 BDCAEHGKF 以下通過java 實現二叉樹排序
/**
* 二叉樹的遍歷 * 12 9 5 8 11 20 通過二叉樹排序 增加一個規則如果加入的節點比本身節點小,那麽放在左邊否則放在右邊 * 第一步 將 12 作為根節點 * 第二步 由於 9<12 所以9作為根節點的左葉子節點 * 第三步 5<12 放左邊但左邊已經有了一個左葉子節點 所以應該放 在9這個節點的下方作為左節點、 * 同理後面也依次排序,最後二叉樹如下: * 12 * / * 9 20 * / \ * 5 11 * * 8 *
@author Administrator * 在java 中 treeMap 就是實現二叉樹而提供的集合。 * 博客地址:二叉樹的理解 */ public class Binary { private int data; private Binary left; private Binary right; public Binary(int i) { data=i; } public void add(Binary binary) { //根據之前的邏輯 就應該是將 當前傳入的這個節點將本節點進行比較 if(binary.data<this.data) { //如果left是null那麽放在左邊,否則就應該遞歸 放該左節點的子節點 if(left==null) { left=binary; }else { left.add(binary); } }else { //同上 if(right==null) { right=binary; }else { right.add(binary); } } } public void travel() { //中序遍歷就是先左子樹 在根節點 在右子樹 if(left!=null) { left.travel(); } System.out.println(data); if(right!=null) { right.travel(); } } //12 9 5 8 11 20 進行排序 public static void main(String[] args) { Binary binary=new Binary(12); binary.add(new Binary(9)); binary.add(new Binary(5)); binary.add(new Binary(8)); binary.add(new Binary(11)); binary.add(new Binary(20)); binary.travel(); } }

數據結構 之 二叉樹