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

數據結構 - 二叉樹

使用 點子 最終 結構 判斷 close 分層結構 節點 二分

二叉樹存儲數據的優勢

在實際使用時會根據鏈表和有序數組等數據結構的不同優勢進行選擇。有序數組的優勢在於二分查找,鏈表的優勢在於數據項的插入和數據項的刪除。但是在有序數組中插入數據就會很慢,同樣在鏈表中查找數據項效率就很低。綜合以上情況,二叉樹可以利用鏈表和有序數組的優勢,同時可以合並有序數組和鏈表的優勢,二叉樹也是一種常用的數據結構。

解析二叉樹

技術分享圖片

紅色是根節點(root)。藍色是子節點也是父節點,綠色的是子節點。其余的線是邊。

節點和鏈表中的節點一樣都可以存放數據信息。

通常來說樹是頂部小,底部大,且樹呈分層結構。

root節點時第0層,以此類推。二叉樹最多有兩個節點。

二叉樹一個節點左子節點的關鍵字小於這個節點,右子節點關鍵字大於或等於這個父節點。

創建一個樹節點

 1 package com.DennisPoint;
 2 
 3 public class Node {
 4     public  int iData;
 5     public double dData;
 6     public Node leftNode;
 7     public Node rightNode;
 8     //顯示樹節點信息
 9     public void showNode()
10     {
11         System.out.println("{ "+iData+","+dData+" }");
12     }
13
}

創建一個樹結構

創建一個樹結構首先是向一個樹種插入數據節點。當一棵樹為null時,數據項是從樹的root節點處開始插入,之後的插入順序是根據搜索節點順序規則進行插入。具體規則是:如果數據項比父節點的數據項要小,則插在父節點的左節點(leftNode),如果比父節點的數據項要大,則將新的node插入在父節點的右節點處(rightNode)。在插入節點的過程中其實也就是對tree遍歷的過程,最終根據條件遍歷到左右節點為null時進行添加新的節點。

技術分享圖片
 1 private Node root;
 2 
 3     //插入Node
 4     //插入之前需要判斷是否為null
 5     //
為null需要比較大小直到currentNode為null就插入 6 public void insert(int iData, double dData) { 7 //創建node節點 8 Node newNode = new Node(); 9 newNode.iData = iData; 10 newNode.dData = dData; 11 //判斷root node是否為null 12 if (root == null) { 13 root = newNode; 14 } 15 //不為null 16 else { 17 Node current = root; 18 Node parent; 19 while (true) { 20 parent = current;//保存當current變為null之前的那一個父節點 21 if (iData < current.iData)//插入左節點 22 { 23 current = current.leftNode;//不斷向左node尋找是否為null 24 if (current == null) { 25 parent.leftNode = newNode; 26 return; 27 } 28 29 } 30 //插入右節點 31 else { 32 current = current.rightNode; 33 if (current == null) { 34 parent.rightNode = newNode; 35 return; 36 } 37 } 38 39 } 40 41 } 42 }
View Code

二叉樹擴展

完全二叉樹

葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若幹位置的二叉樹。

平衡二叉樹

左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

http://www.cnblogs.com/polly333/p/4798944.html

二叉查找樹

又稱為有序二叉樹, 任意跟節點的左子樹節點的key值均小於根節點, 右子樹節點的key值均大於根節點.

紅黑樹

是一種平衡二叉樹,但是是一個不完全的紅黑樹, 理解起來比較難, 可以參考下面的文章

https://blog.csdn.net/sun_tttt/article/details/65445754

數據結構 - 二叉樹