[Data Structure & Algorithm] 二叉排序樹

二叉排序樹 BST

  • 性質
    • 若左子樹非空,則左子樹上全部記錄的值<(=)根記錄的值
    • 若右子樹非空,則右子樹上全部記錄的值>(=)根記錄的值
    • 左右子樹自己又是一顆二叉排序樹
    • 按中序遍歷,能夠獲得一個遞增有序序列
  • 空樹也是二叉排序樹
    • 即 構造二叉排序樹 = 二叉排序樹的插入操做
  • 存儲 - 通常用二叉鏈表

二叉排序樹的插入

  • 基本思路
    1.若是二叉樹爲空,把要插入的關鍵字做爲根結點
    2.若是二叉樹不爲空,將要插入的關鍵字和根結點比較,大於根結點的插入到右子樹,不然插入到左子樹

二叉排序樹的查找

  • 基本思路
    1.將要查找的關鍵字和根結點比較
    2.1若是=根結點,直接返回
    2.2若是>根結點,到右子樹中查找
    2.3若是<根結點,到左子樹中查找
    3.重複1,2,直到找到相等的值或查詢到空結點
  • 平均查找長度 ABL
    • 含有n個結點的二叉排序樹的ABL不惟一,取決於樹的形態
      • 最慢 - (n+1)/2
        • 構造時插入順序表 - 與順序查找相同
      • 最快 - log2n
        • 與折半查找的斷定樹的形態相同

二叉排序樹的刪除

  • 基本思路
    1.查找要刪除的關鍵字,令p指向該關鍵字,f指向該關鍵字的父結點
    2.1 若是p爲葉子結點,直接刪除
    2.2 若是
    p只存在一個子樹,將p的子樹直接和f相連
    2.3 若是p左右子樹都存在,
    方法一 - 將
    p的左子樹s(中序序列中的直接前驅)直接和f相連,再把p的右子樹做爲s的右子樹
    方法二 - 將p的左(或右)子樹s(中序序列中的直接前驅(或後繼))與p交換位置,再刪除p,此時*p只會有左(或右)子樹,或者無子樹,能夠參考2.2
相關文章
相關標籤/搜索