資料結構 樹

2021-10-03 08:36:04 字數 2128 閱讀 5609

樹的定義:樹(tree)是n(n>=0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:(1)有且只有乙個特定的稱為根(root)的結點;(2)當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1、t2…tm,其中每個集合本身又是一顆樹,並且稱為根的子樹(subtree):

二叉樹

二叉樹(binary tree)是n(n>=0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由乙個根結點和兩棵互不相交的、分別為根結點的左子樹和右子樹的二叉樹組成。

二叉樹的順序儲存適用性不強,鏈式儲存結構比較方便操作,也稱二叉鍊錶。

二叉樹的二叉鍊錶結點結構定義:

typedef

struct node

node;

二叉樹的遍歷方法有四種,分別是:前序遍歷,中序遍歷,後序遍歷和層次遍歷。

前序遍歷(左右根):若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹:

**如下:

void

frontprint

(node *t)

//前序遍歷輸出

}

中序遍歷(左根右):

**如下:

void

midprint

(node *t)

//中序遍歷輸出

}

後序遍歷(左右根):

**如下:

void

lastprint

(node *t)

//後序遍歷輸出

}

層序遍歷(需要用到佇列):若樹為空,則空操作返回,否則從樹的第一層,也就是根結點開始訪問,從上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。

)}二叉搜尋樹

int

find

(int x,build tree)

二叉搜尋樹找最小值:

int

findmin

(build tree)

二叉搜尋樹找最大值:

int

findmax

(build tree)

return tree;

}

二叉搜尋樹的插入:關鍵是要找到應該插入的位置,然後採用與find類似的方法。

build insert

(int x,build tree)

else

//開始找x所插入的位置

return tree;

}

二叉搜尋樹的刪除:

三種情況:1、要刪除的是葉結點:直接刪除,並再修改其父結點指標指向null;

2、要刪除的結點只有乙個子結點:將其父結點的指標指向要刪除結點的

子結點。

3、要刪除的結點有左右兩棵子樹:用另一結點替代被刪除的結點:右子樹的最小元素或者左子樹的最大元素。

平衡二叉樹

在任一結點左右子樹高度差的絕對值不超過1;

如下圖:

資料結構 樹

樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...

資料結構 樹

1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...

資料結構 樹

二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...