樹結構是一種非常重要的非線性結構,反應了資料元素之間的層次關係和分支關係。
樹的表示方法
根據樹中節點的各子樹從左到右是否有次序,能否交換分為
二叉樹並非是樹的特殊情形,它和度數為2的有序樹是兩種不同的資料結構。
二叉樹的儲存結構可分為順序儲存和鏈式儲存。
順序儲存
二叉樹的順序儲存結構就是把二叉樹的所有結點按照一定的次序順序儲存到陣列中,陣列中只儲存結點的值,結點之間的邏輯關係由陣列中下標的順序來體現。如果不是完全二叉樹也會看成完全二叉樹存入陣列,空的子樹存入空值。
節點的邏輯關係
順序二叉樹對於完全二叉樹而言,既簡單又節省儲存空間,而對於一般二叉樹儲存了很多空節點會造成大量的儲存空間的浪費。
鏈式儲存
順序儲存一般二叉樹會造成大量儲存空間的浪費,因此,一般二叉樹採用鏈式儲存的方式。
儲存節點:每個節點由資料域和兩個指標域組成,指標分別指向左兒子和右兒子,如果左兒子為空,則左指標為null。
//判斷葉子節點
public
boolean
isleaf()
//設定左孩子
public binnode setleft
(binnode node)
//獲取左孩子
public binnode left()
//設定右孩子
public binnode setright
(binnode node)
//獲取右孩子
public binnode right()
}二叉樹的遍歷是指從根節點出發,按照某種次序訪問所有節點,使得每個節點被訪問依次且僅被訪問依次
前序遍歷
先遍歷根節點,再遍歷左子樹,最後才遍歷右子樹
public
void
inorder
(binnode rt)
print
(rt)
;inorder
(rt.
left()
);inorder
(rt.
right()
)}
中序遍歷
先遍歷左子樹,再遍歷根節點,最後才遍歷右子樹
public
void
inorder
(binnode rt)
inorder
(rt.
left()
);print
(rt)
;inorder
(rt.
right()
)}
後序遍歷
先遍歷左子樹,再 遍歷右子樹,最後擦遍歷根節點。
public
void
inorder
(binnode rt)
inorder
(rt.
left()
);inorder
(rt.
right()
);print
(rt)
;}
記憶總結:根據訪問的位置來區分前序,中序和後序
層次遍歷
從根節點開始,從上至下逐層遍歷,在同一層,則從左到右的順序對節點逐個訪問。
完全二叉樹
平衡二叉樹
排序二叉樹
線索二叉樹
記憶總結:根據訪問的位置來區分前序,中序和後序
層次遍歷
從根節點開始,從上至下逐層遍歷,在同一層,則從左到右的順序對節點逐個訪問。
完全二叉樹
平衡二叉樹
排序二叉樹
線索二叉樹
注:僅用於學習交流
資料結構 樹結構
樹結構以一種 一對多 的資料關係。樹的結點 結點 樹結構的每乙個元素都可以被稱為乙個節點。父結點 a結點是b,c的父結點 子結點 b,c是a的子結點 根結點 a是樹的根結點,每乙個非空的樹結構中只有乙個根結點 q 如何判斷某個結點是否是根結點?a 根結點沒有父節點 葉子結點 d,e,f是葉子結點,葉...
搞懂資料結構 動態陣列
什麼是陣列 陣列是一種順序儲存的線性表,所有元素的儲存的記憶體位址都是連續的。動態陣列 在很多程式語言中,陣列建立後是容量是固定的,但是實際開發中,我們更希望能動態的改變陣列的容量 介面設計 int size 元素的數量 boolean isempty 是否為空 boolean contains i...
資料結構 二叉樹結構
資料結構 二叉樹結構 定義 一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。完全二叉樹 將結點按從左到右,再從上到下的順序排布,得到的二叉樹就是完全二叉樹。例如有10個結點,...