基本資料結構:二叉樹(binary tree) c
二叉樹首先是一棵樹,每個節點都不能有多於兩個的兒子,也就是樹的度不能超過2。二叉樹的兩個兒子分別稱為「左兒子」和「右兒子」,次序不能顛倒。如圖1是乙個簡單的二叉樹。
二叉樹的種類
一種是滿二叉樹,除了最後一層的葉子節點外,每一層的節點都必須有兩個兒子節點。如圖2是乙個滿二叉樹。
另一種是完全二叉樹,一棵二叉樹去掉最後一層後剩下的節點組成的樹為滿二叉樹,最後一層的節點從左到右連續,沒有空出的節點,這樣的樹稱為完全二叉樹。如圖3是一棵完全二叉樹。
二叉樹的實現
因為一棵樹有最多只有兩個兒子,所以我們可以用指標直接指向他們。乙個節點包括值(data)、指向左兒子的指標(lson)和指向右兒子的指標(rson)。
struct二叉樹的插入,刪除,查詢和鍊錶差不多,不同的是需要指定是左兒子還是右兒子。treenode
二叉樹的陣列實現也很簡單,假如說根節點在arr[0]這個位置,那麼它的左兒子就在arr[2*0+1],也就是arr[1]這個位置,它的右兒子在arr[2*0+2] ,也就是arr[2]這個位置。對於下標為i的節點來說,它的左兒子的下標為2*i+1,右兒子的下標為2*i+2。
二叉樹的遍歷
二叉樹的遍歷有三種,分別為先序遍歷,中序遍歷和後序遍歷。這三種遍歷方式是根據根節點的讀取順序來分的:
先序遍歷,就是最先讀取根節點,然後再讀取左子樹(按照同樣的方法讀取子樹上的節點),最後讀取右子樹;
中序遍歷,就是第二個讀取根節點,最先要讀取的是左子樹,然後根節點,最後右子樹;
後序遍歷,就是最後乙個讀取根節點,最先讀取的是左子樹,第二個讀取右子樹,最後讀取根節點。
先序遍歷的遞迴實現**:
void insubtree(struct treenode*tree)
二叉搜尋樹基本資料結構實現
二叉搜尋樹中乙個結點包含3個指標left,right,prev和乙個衛星資料key。這三個指標分別指向左兒子,右兒子,父節點。如果孩子結點和父親結點不存在,相應指標為空。根結點的prev指向空。1 遍歷 中序遍歷,先序遍歷,後續遍歷 2 查詢乙個關鍵字,返回該關鍵字的結點指標 3 返回最大關鍵字最小...
資料結構 二叉樹 反轉二叉樹
include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...
《資料結構》 二叉樹
二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...