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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++学习笔记:算法知识之平衡树学习笔记,收藏一波吧!

發布時間:2025/3/15 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++学习笔记:算法知识之平衡树学习笔记,收藏一波吧! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平衡樹存儲:

size就是節點的個數。

value是節點代表的權值。

權值相同的兩個節點被視為一個,num記錄折疊數量。

rand是隨機數,用來維護平衡樹。

son就是兩個兒子。

?

平衡樹size更新:

實際操作中,各個變量的值都是不斷更新的,size也不例外。

函數體:

一個節點包括的節點個數用腳也能想到:左兒子size與右兒子size的和,加上這個節點折疊數量。

完整的平衡樹size更新代碼:

?

平衡樹插入:

學習完上面的內容,接下來的基本逼死人的操作插入與刪除就很簡單了:

由于Treap = Tree + Heap

所以平衡樹插入與二叉排序樹插入差不多

函數體:

插入節點總會遇到各種增加碼量的情況,需要我們一一判斷:

[ 1?]節點不存在

什么??節點不存在??殺了出題人!

當插入函數用在建樹中,這種情況很常見。

沒有節點,那我們就開墾一個節點。(水土流失,土地荒漠化請走開)

├ 節點總數加1

├ 新節點size為1

├ 新節點num為1

├ 權值為data

└ 生成rand

→→→嶄新的節點!!(不要998,不要98,只要9.8!)

代碼實現就是一個簡單的模擬:

?

?

?[ 2 ]有一個權值為data的節點

那更簡單了!!

[ 3?]尋找子樹滿足情況一或情況二

去哪棵子樹呢??定義一個變量。

有了明確的方向,就應該堅持走下去:

隨機數判斷,隨機旋轉:

更新size:

pushup(root);

至此,插入操作基本完成。

完整平衡樹插入代碼:

?

平衡樹旋轉:

平衡樹旋轉不破壞平衡樹的性質,也就是說

旋轉前:A<B<C<D<E<F

旋轉后:A<B<C<D<E<F

完整平衡樹旋轉代碼:

?

?

?

?

?

博客園:OIer|zythonc

學習C/C++編程知識,提升C/C++編程能力,歡迎關注博主微信公眾號:C語言編程學習基地,一起來學習編程吧!

總結

以上是生活随笔為你收集整理的C/C++学习笔记:算法知识之平衡树学习笔记,收藏一波吧!的全部內容,希望文章能夠幫你解決所遇到的問題。

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