日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

平衡樹存儲:

size就是節(jié)點(diǎn)的個(gè)數(shù)。

value是節(jié)點(diǎn)代表的權(quán)值。

權(quán)值相同的兩個(gè)節(jié)點(diǎn)被視為一個(gè),num記錄折疊數(shù)量。

rand是隨機(jī)數(shù),用來維護(hù)平衡樹。

son就是兩個(gè)兒子。

?

平衡樹size更新:

實(shí)際操作中,各個(gè)變量的值都是不斷更新的,size也不例外。

函數(shù)體:

一個(gè)節(jié)點(diǎn)包括的節(jié)點(diǎn)個(gè)數(shù)用腳也能想到:左兒子size與右兒子size的和,加上這個(gè)節(jié)點(diǎn)折疊數(shù)量。

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

?

平衡樹插入:

學(xué)習(xí)完上面的內(nèi)容,接下來的基本逼死人的操作插入與刪除就很簡單了:

由于Treap = Tree + Heap

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

函數(shù)體:

插入節(jié)點(diǎn)總會遇到各種增加碼量的情況,需要我們一一判斷:

[ 1?]節(jié)點(diǎn)不存在

什么??節(jié)點(diǎn)不存在??殺了出題人!

當(dāng)插入函數(shù)用在建樹中,這種情況很常見。

沒有節(jié)點(diǎn),那我們就開墾一個(gè)節(jié)點(diǎn)。(水土流失,土地荒漠化請走開)

├ 節(jié)點(diǎn)總數(shù)加1

├ 新節(jié)點(diǎn)size為1

├ 新節(jié)點(diǎn)num為1

├ 權(quán)值為data

└ 生成rand

→→→嶄新的節(jié)點(diǎn)!!(不要998,不要98,只要9.8!)

代碼實(shí)現(xiàn)就是一個(gè)簡單的模擬:

?

?

?[ 2 ]有一個(gè)權(quán)值為data的節(jié)點(diǎn)

那更簡單了!!

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

去哪棵子樹呢??定義一個(gè)變量。

有了明確的方向,就應(yīng)該堅(jiān)持走下去:

隨機(jī)數(shù)判斷,隨機(jī)旋轉(zhuǎn):

更新size:

pushup(root);

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

完整平衡樹插入代碼:

?

平衡樹旋轉(zhuǎn):

平衡樹旋轉(zhuǎn)不破壞平衡樹的性質(zhì),也就是說

旋轉(zhuǎn)前:A<B<C<D<E<F

旋轉(zhuǎn)后:A<B<C<D<E<F

完整平衡樹旋轉(zhuǎn)代碼:

?

?

?

?

?

博客園:OIer|zythonc

學(xué)習(xí)C/C++編程知識,提升C/C++編程能力,歡迎關(guān)注博主微信公眾號:C語言編程學(xué)習(xí)基地,一起來學(xué)習(xí)編程吧!

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。