青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評論-24  文章-0  trackbacks-0
二叉查找樹是這樣一種數據結構:它是按二叉樹的結構來組織的,節點除了key域外,還包含有left、right和p指針,分別指向自己的左孩子、右孩子和父親節點。如果兒子或者父親不存在,則該指針置NULL。二叉查找樹又稱為二叉排序樹。
二叉查找樹中關鍵字的存儲方式總是滿足:
設x為二叉查找樹中的一個節點,如果y是x的左子樹中的任意一個節點,則key[y] <= key[x];如果y是x的右子樹中的任意一個節點,則key[y] >= key[x]。因此如果對一棵二叉查找樹進行中序遍歷的話那么輸出的結果將是升序排列的。

一、中序遍歷二叉樹

其算法是簡單的,遞歸算法如下:

1 INORDER-TREE-WALK(x)
2       if x != NULL
3       then
4             INORDER-TREE-WALK(left[x])
5             print key[x]
6             INORDER-TREE-WALK(right[x])

定理:如果x是一棵包含n個節點的子樹的根,則調用INORDER-TREE-WALK(x)過程的時間為θ(n)。
利用遞推公式證明還是相對簡單的,略。

二、查詢二叉查找樹

1、查找指定關鍵字k
給定指向樹根的指針和關鍵字k,返回包含關鍵字k的指針或者NULL,遞歸算法如下:

1 TREE-SEARCH(x, k)
2       if x == NULL or k == key[x]
3       then
4             return x
5       if k < key[x]
6       then
7             return TREE-SEARCH(left[x], k)
8       else
9             return TREE-SEARCH(right[x], k)

非遞歸版本的算法如下:

1 INTERATIVE-TREE-SEARCH(x, k)
2       while x != NULL and k != key[x]
3       do
4             if k < key[x]
5             then
6                   x = left[x]
7             else
8                   x = right[x]
9       return x

算法復雜度相同,均為O(h),其中h為樹的高度。

2、最大關鍵字元素和最小關鍵字元素
函數TREE-MINIMUM(x)和TREE-MAXIMUM(x)分別返回二叉查找樹的最小關鍵字元素和最大關鍵字元素,思想也是簡單的,沿著二叉查找樹的left指針一直走下去直到left指針為空,則當前節點為最小關鍵字元素;沿著二叉查找樹的right指針一直走下去直到right指針為空,則當前節點為最大關鍵字元素。復雜度也相同,均問O(h)。
算法如下:

 1 TREE-MINIMUM(x)
 2       while left[x] != NULL
 3       do
 4             x = left[x]
 5       return x
 6 
 7 TREE-MAXIMUM(x)
 8       while right[x] != NULL
 9       do
10             x = right[x]
11       return x

3、前趨與后繼
當找尋一個二叉查找樹的中序遍歷后繼節點的時候,有下面兩種情況:
  • 如果當前節點的right指針不為NULL,則說明節點有右子樹,由于是中序遍歷,因此當前節點的后繼節點必然是其右子樹中關鍵字值最小的節點,這通過TREE-MINIMUM(right[x])即可得到;
  • 如果當前節點的right指針為NULL,則說明節點沒有右子樹,此時情況稍微有些復雜,可以畫圖理解一下,其實就是如下情況,沿著當前節點的父指針往上走,只要此節點是是其父節點的右孩子,就繼續往上走,直到此節點是其父節點的左孩子或者此節點為空為止,返回此節點的父節點或者NULL。
用圖形表示如下:

我們可以看到,如果節點的right[x]為空,則y節點必是x節點的后繼節點,除非不包含符合這一條件的y節點,則x的后繼節點為NULL。
由此算法如下:

 1 TREE-SUCCESSOR(x)
 2       if right[x] != NULL
 3       then
 4             return TREE-MINIMUM(right[x])
 5       y = p[x]
 6       while y!= NULL and x == right[y]
 7       do
 8             x = y
 9             y = p[y]
10       return y


同理,求節點x的前趨類似:
  • 如果當前節點的left指針不為NULL,則說明節點有左子樹,當前節點的前趨節點必然是其左子樹中關鍵字值最大的節點,這通過TREE-MAXIMUM(left[x])即可得到;
  • 如果當前節點的left指針為NULL,則說明節點沒有左子樹,此時為如下情況,沿著當前節點的父指針往上 走,只要此節點是是其父節點的左孩子,就繼續往上走,直到此節點是其父節點的右孩子或者此節點為空為止,返回此節點的父節點或者NULL。
由此算法如下:

 1 TREE-PREDECCESSOR(x)
 2       if left[x] != NULL
 3       then
 4             return TREE-MAXIMUM(left[x])
 5       y = p[x]
 6       while y != NULL and x == left[y]
 7       do
 8             x = y
 9             y = p[y]
10       return y

兩個算法時間復雜度相同,均為O(h)。

三、二叉查找樹的插入和刪除

1、插入
對于二叉查找樹的插入操作,相對簡單,只需要從二叉查找樹的根開始向下查找應該插入的位置即可。這個應該插入的位置必然為一葉子節點的left指針或者right指針指向的空域。算法如下:

 1 TREE-INSERT(T, z)
 2       y = NULL                        //y指向當前節點的父節點
 3       x = root[T]                     //指向當前節點
 4       while x != NULL
 5       do
 6             y = x
 7             if key[z] < key[x]
 8             then
 9                   x = left[x]
10             else
11                   x = right[x]
12       p[z] = y
13       if y == NULL                  //如果為空樹
14       then
15             root[T] == z            //樹根則為z
16       else if key[z] < key[y]
17       then
18             left[y] = z
19       else
20             right[y] = z

算法復雜度為O(h)。

2、刪除
對于刪除一個節點,則情況復雜很多,因為刪除操作破壞了二叉查找樹的結構,必須調整樹的結構,仔細觀察發現,不外乎以下三種情況:
  1. 如果要刪除的節點的左右孩子均為空,則直接刪除該節點即可,因為這樣并沒有破壞二叉查找樹的結構;
  2. 如果要刪除的節點只有一個孩子(為左孩子或者右孩子均可),則直接將要刪除節點的父節點的left指針或者right指針指向要刪除節點的孩子節點即可,同時將孩子節點的父指針指向要刪除節點的父節點;
  3. 如果要刪除的節點既有左子樹又有右子樹,則將要刪除節點用其后繼節點替換,并刪除后繼節點即可。
為此算法如下:

 1 TREE-DELETE(T, z)
 2       if left[z] == NULL or right[z] == NULL
 3       then                                                            //y指向真正需要刪除的節點
 4             y = z                                                     //y要么為要刪除的節點
 5       else
 6             y = TREE-SUCCESSOR(z)                  //y要么為要刪除節點的后繼節點
 7       if left[y] != NULL
 8       then
 9             x = left[y]
10       else
11             x = right[y]
12       if x != NULL
13       then
14             p[x] = p[y]
15       if p[y] == NULL
16       then
17             root[T] = x
18       else if y == left[p[y]]
19       then
20             left[p[y]] = x
21       else
22             right[p[y]] = x
23       if y != z
24       then
25             key[z] = key[y]
26       return y

時間復雜度同樣為O(h)。

四、隨機構造的二叉查找樹性能分析
posted on 2011-10-31 16:28 myjfm 閱讀(350) 評論(0)  編輯 收藏 引用 所屬分類: 算法基礎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情bt| 久久综合色8888| 国产日韩精品在线| 国产精品久久二区| 国产精品视频免费观看www| 国产精品日韩一区| 国产一区二区福利| 在线成人黄色| 99国产精品国产精品毛片| 在线视频欧美日韩精品| 欧美在线观看视频| 亚洲国产欧美精品| 久久久久久久久岛国免费| 玖玖玖国产精品| 欧美国产免费| 亚洲国产欧美国产综合一区| 亚洲国产精品va在线看黑人| 亚洲激情在线观看| 亚洲一级免费视频| 久久综合伊人77777蜜臀| 欧美激情乱人伦| 国产精品―色哟哟| 亚洲激情视频网站| 亚洲欧美999| 欧美高清视频在线| 亚洲一区二区三区久久| 久久美女艺术照精彩视频福利播放| 欧美成人精品福利| 国产精品爽爽ⅴa在线观看| 一区二区三区在线视频免费观看| 日韩视频中文| 久久综合网色—综合色88| 一区二区激情小说| 久久天堂av综合合色| 国产精品久久久久久久午夜片| 亚洲国产精品久久久久秋霞不卡 | 欧美精品久久久久久| 欧美视频在线不卡| 亚洲国产一区视频| 久久国产精品久久久久久久久久| 91久久精品国产91久久性色tv| 午夜影视日本亚洲欧洲精品| 欧美日韩成人综合| 在线观看视频一区二区| 午夜在线播放视频欧美| 亚洲精品少妇30p| 久久婷婷丁香| 国一区二区在线观看| 欧美亚洲色图校园春色| 亚洲最新合集| 欧美日韩一区二区三区四区五区| 在线日韩欧美| 久久综合国产精品| 亚洲欧美日本国产专区一区| 欧美日韩在线一区二区| 日韩亚洲欧美一区二区三区| 欧美成人精品激情在线观看| 久久av一区二区三区| 国产午夜一区二区三区| 欧美亚洲一区| 午夜精品久久久久久久99樱桃| 国产精品二区三区四区| 亚洲视频在线看| 99re视频这里只有精品| 欧美精品在线免费观看| 日韩一级黄色片| 一本久道综合久久精品| 欧美日韩国产色视频| 韩日精品视频| 久久深夜福利免费观看| 久久国产精品第一页| 国产视频在线观看一区二区三区 | 国产在线一区二区三区四区| 欧美专区第一页| 性做久久久久久久免费看| 国产一区91精品张津瑜| 老司机免费视频久久| 欧美sm视频| 亚洲视频电影图片偷拍一区| 亚洲网站视频| 国产一区二区精品久久91| 久久一区免费| 欧美激情视频网站| 性做久久久久久久久| 久久精品国产精品亚洲精品| 亚洲国产cao| 99热免费精品| 国产一区二区三区日韩欧美| 欧美电影在线| 国产精品进线69影院| 久久久久国产精品一区| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美国产精品专区久久| 久久成人精品视频| 99re6这里只有精品| 亚洲欧美另类久久久精品2019| 极品中文字幕一区| 最近中文字幕日韩精品| 国产精品午夜在线| 亚洲国产成人在线视频| 国产精品一区二区三区观看| 美女精品在线观看| 国产精品国色综合久久| 欧美成人免费全部| 国产精品美女www爽爽爽| 免费欧美视频| 国产精品久线观看视频| 欧美国产专区| 国产毛片精品国产一区二区三区| 欧美成人视屏| 国产亚洲欧美日韩一区二区| 亚洲乱码国产乱码精品精可以看 | 欧美国产免费| 国产日韩综合| 一区二区三区视频观看| 在线日韩视频| 亚洲欧美中文日韩v在线观看| 亚洲精品在线观看免费| 久久久精品国产一区二区三区 | 国产一区二区三区在线免费观看 | 久久精品亚洲国产奇米99| 欧美激情91| 久久综合精品国产一区二区三区| 欧美三级电影一区| 91久久极品少妇xxxxⅹ软件| 韩国亚洲精品| 欧美一区二区三区视频| 亚洲欧美日产图| 欧美日韩一区综合| 亚洲激情婷婷| 亚洲日本中文字幕| 久久综合色综合88| 老**午夜毛片一区二区三区| 国产精品入口夜色视频大尺度| 日韩天堂av| 亚洲午夜一区二区三区| 欧美日韩国产综合视频在线观看中文| 欧美国产高清| 亚洲三级视频| 欧美精彩视频一区二区三区| 亚洲激情在线视频| 99re在线精品| 欧美日韩视频在线一区二区观看视频| 91久久在线| 亚洲私人黄色宅男| 国产精品久久九九| 亚洲一区二区免费| 欧美一区二区三区在线播放| 国产欧美精品一区aⅴ影院| 亚洲欧美网站| 久久尤物电影视频在线观看| 一区二区在线视频播放| 久久综合五月| 亚洲精品美女91| 亚洲午夜三级在线| 国产九色精品成人porny| 欧美一区亚洲| 欧美激情五月| 亚洲一区二区av电影| 国产精品一区二区在线| 欧美在线1区| 亚洲国产高清在线观看视频| 亚洲深夜福利网站| 国产亚洲精品bt天堂精选| 久久夜色撩人精品| 亚洲精品一区二区三| 校园春色国产精品| 亚洲电影下载| 欧美日韩一区二| 久久精品视频在线看| 91久久精品一区二区别| 亚洲欧美制服另类日韩| 精品999成人| 欧美日韩国产一级| 亚洲综合日韩| 亚洲电影av在线| 亚洲欧美伊人| 亚洲激情综合| 国产精品一区二区你懂的| 久久综合色88| 亚洲女性裸体视频| 亚洲人成精品久久久久| 香蕉亚洲视频| 亚洲美女av在线播放| 国产亚洲精品bt天堂精选| 欧美日本亚洲| 久久午夜影视| 午夜日韩电影| 亚洲欧洲日韩在线| 欧美一级成年大片在线观看| 免费看精品久久片| 性欧美办公室18xxxxhd| 亚洲精品中文字幕有码专区| 国产亚洲欧洲一区高清在线观看 | 一本久久a久久免费精品不卡| 久久婷婷av| 欧美在线观看视频一区二区| 99re6热只有精品免费观看| 伊人久久噜噜噜躁狠狠躁| 欧美成人午夜激情在线|