天天看點

二叉搜尋樹

                             二叉搜尋樹

定義:

     二叉搜尋樹是一棵二叉樹來組織的。二叉搜尋中的關鍵字總是以滿足二叉樹搜尋性質的方式來存儲的。

    設x 是二叉樹中的一個節點。如果y是x 左子樹中的一個結點,那麼 y.key <= x.key。

                              如果y是x 右子樹中的一個結點,那麼 y.key >= x.key。

算法的分析:

    假如我們選擇中序周遊整個二叉樹。 例如

                                   6

                           5                7

                      2         5                 8

   這樣一個二叉樹,(中間的線自己想象)。

   INORDER-TREE—WALK

   1  if x != NULL

   2     INORDER-TREE-WALK(x, left)

   3     print x.key;

   4     INORDER-TREE-WALK(x, right)

 很簡單我們可以得到樹的中序周遊結果: 2 5 5 6 7 8

周遊一棵具有N個結點的二叉搜尋樹需要消耗的時間是:Θ(n)

證明:

   用 T(n)表示需要的時間,由于 中序需要通路這棵樹的全部n各節點,是以有T(n)=Ω(n),下面隻要證明T(n) = O(n).

   對于一棵空樹, 需要消耗很小的常數時間c,對于某個常數,c>0;有T(0) = c;

   n > 0 , 假如x 的左子樹上 有 k個結點,那麼右子樹上有 n - k -1;

   對于T(n) 有 T(n) <= T(k) + T(n-k-1) +d;  d >0;

   使用替換法: T(n) <= (c+d)n +c; 可以得出T(n) = O(n);

繼續閱讀