日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据结构-树】3.详解二叉排序树(理论+代码)

發布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构-树】3.详解二叉排序树(理论+代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉排序樹

二叉排序樹的定義

二叉排序樹也稱為二叉查找樹。二叉排序樹或者是一棵空樹,或者是一棵具有如下特性的非空為茶樹

  • 若左子樹非空,則左子樹所有結點關鍵字值均小于根結點的關鍵字值
  • 若右子樹非空,則右子樹所有結點關鍵字值均大于根結點的關鍵字值
  • 左右子樹本身也分別為一棵二叉排序樹
  • 總結來說:左子樹結點值 < 根結點值 < 右子樹結點值

    二叉排序樹的查找

    步驟:

  • 若根結點關鍵字值等于目標值,返回true
  • 若根結點關鍵字值小于目標值 ,如果該根結點有左子樹,則向左子樹繼續搜索;否則返回false
  • 若根結點關鍵字值大于目標值 ,如果該根結點有右子樹,則向右子樹繼續搜索;否則返回false
  • bool BST_search(TreeNode *root, int value){if(root->val == value) return true;if(root->val > value) {if(root->left) {BST_search(root->left, value);} else {return false;}} else {if(root->right) {BST_search(root->right, value);} else {return false;}} }

    二叉排序樹的插入

    步驟:

  • 若根結點關鍵字值小于插入值 ,如果該根結點有左子樹,則向左子樹繼續搜索;否則插入,作為根結點的左子樹
  • 若根結點關鍵字值大于插入值 ,如果該根結點有右子樹,則向右子樹繼續搜索;否則插入,作為根結點的右子樹
  • void BST_insert(TreeNode *node, TreeNode *insert) {if(node->val > insert->val) {if(node->left) {BST_insert(node->left, insert);} else {node->left = insert;}} else {if(node->right) {BST_insert(node->right, insert);} else {node->right = insert;}} }

    二叉排序樹的構造

    二叉樹的構造需要與二叉樹的插入相結合

    void create_BST(vector<int> nums, BSTNode *root) { // root 的關鍵值是nums[0]int len = nums.size();int i = 1;while(i<len){BST_insert(root,nums[i]);i++;} }

    二叉排序樹的刪除

    刪除操作的實現過程按3種情況來處理:

  • 若被刪除結點node是葉子結點,則直接刪除
  • 若被刪除結點只有一棵左子樹或右子樹,則讓node的組數稱為node雙親結點的子樹,替代node的位置
  • 若結點node只有左、右兩棵子樹,則令node的直接后繼(或其直接前驅)替代node,然后從二叉樹排序中刪去這個直接后繼(或其直接前驅)—— 本質上就是去找左子樹的最大關鍵字值和右子樹最小樹值
  • 總結來說就一個標準,刪除的結點后使刪除后BST依舊符合BST的基本約束,同時使整棵樹改變最少

    二叉排序樹的查找效率

    平均成功查找長度:ASL成功 = (層數)?(同層節點個數)n\frac{(層數)*(同層節點個數)}{n}n()?()?

    平均失敗查找長度:ASL失敗 = (層數)?(同層與該節點子節點情況類似個數)n+1\frac{(層數)*(同層與該節點子節點情況類似個數)}{n+1}n+1()?()?

    詳情參考之前文章文章【【數據結構-查找】1.通俗易懂講解 —— 順序-折半-分塊查找】中的【折半查找】這一塊

    總結

    以上是生活随笔為你收集整理的【数据结构-树】3.详解二叉排序树(理论+代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。