1. 程式人生 > >查詢二叉樹(BST)

查詢二叉樹(BST)

1、查詢二叉樹的定義

先上圖:
這裡寫圖片描述

一棵二叉搜尋樹(Binary Sort Tree)是以一棵二叉樹來組織的,可以用連結串列資料結構來表示,其中,每一個結點就是一個物件,一般地,包含資料值和指向孩子(也可能是父母)的指標。如果某個孩子結點不存在,其指標為空(NULL)。

  • 查詢樹的左右子樹各是一棵查詢樹
  • 若查詢樹的左子樹非空,則其左子樹上的各節點值均小於根節點的值。
  • 若查詢樹的右子樹非空,則其右子樹上的各節點值均大於根節點的值。

2、查詢樹的基本操作

  • 查詢
  • 插入節點
  • 刪除節點

2.1 查詢

二叉搜尋樹很多時候用來進行資料查詢。這個過程從樹的根結點開始,沿著一條簡單路徑一直向下,直到找到資料或者無法找到返回NULL

值。從圖中可以看出,在查詢二叉樹中查詢很容易,比大小就可以,小就向左找,大就向右找。
例如說,查詢12。
步驟:

  • 12<16,向左找,與9去比較
  • 12>9,向右找,與12去比較
  • 12=12,找到了

2.2 插入

在查詢樹中插入一個節點需要分情況:

  • 如果相同鍵值的節點已經存在,則不再插入
  • 如果查詢樹為空,則已新節點為查詢樹
  • 將要插入節點的鍵值與插入後的父節點的鍵值比較,就能確定新節點是父節點的左子節點,還是右子節點。

2.3 刪除

在查詢樹中刪除一個節點需要分情況:

  • 若待刪除的節點是葉子節點,則直接刪除該節點
  • 若待刪除的節點只有一個子節點,則將待刪除節點父節點與其子節點直接相連,然後刪除該節點
  • 若待刪除的節點有兩個子節點,則在其左子樹上,用中序遍歷尋找值最大節點s,用節點s的值代替該節點的值,然後刪除節點s,且節點s必屬上述兩種情況之一

例題1:

利用逐點插入法建立序列(50,72,43,85,75,20,35,45,65,30)對應的二叉排序樹以後,查詢元素30要進行__次元素間的比較
A. 4
B.  5
C.  6
D.  7

插入是指把每個節點都看成查詢樹,因此可以畫出:
這裡寫圖片描述

例題2:

在常用的描述二叉排序樹的儲存結構中,關鍵字值最大的節點__
A. 左指標一定為空
B. 右指標一定為空
C. 左、右指標均為空
D. 左右指標均不為空