C語言 編寫線段樹
線段樹同樣也是一個比較冷門的資料結構,一般用於計算區域和,或者在修改某一個或幾個節點的資料時,計算區域資料和。
首先線段樹的特點是樹的葉子全是陣列中的數,而往上的節點都是相應子節點的和。
首先需要對陣列創造相應的樹結構。其中node為0也就是根節點,start和end指的是需要建立樹的陣列的起始和終點位置。而整個函式的思路為,mid為起點和終點的中點,根節點代表[start,end]的元素和,而它的兩個子節點就是[start,mid]和[mid+1,end],同時接著往下走,把陣列進一步進行劃分,由於用的是遞迴的方法,所以需要考慮遞迴出口,而出口就是找到的區域中只含有一個數字也就是到了葉子,其中存放nums[start]的值即可,而往上的根節點就是兩個葉子的和。
更新陣列和樹的思路是同樣的,通過二分的方法去找到需要更改的葉子節點也即是start == end的時候,這時將nums[idx]和tree[node]改為相應的數值,同時將向上的根節點的值相應更改。
查詢陣列區域和,這地方也同樣假如節點正好是所求區域就直接返回節點值,假如進入的區域在所求區域外直接返回0,假如找到葉子節點直接返回葉子節點的值。
用一個隨手打的陣列{1,2,11,25,31,5} 測試一下,計算[1,3]也就是2+11+25的結果:
結果如下:
相關文章
- 使用C語言編寫貪食蛇程式原始碼C語言原始碼
- 用C語言編寫windows服務程式C語言Windows
- C++演算法 線段樹C++演算法
- 用C語言編寫小遊戲——“井字棋”C語言遊戲
- c語言編寫經驗逐步積累4C語言
- 用C語言編寫的公式計算器C語言公式
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- 57段讓編譯器崩潰的C語言程式碼編譯C語言
- HTML語言編寫指南HTML
- 二叉樹 C語言二叉樹C語言
- 淺談c語言程式碼段 資料段 bss段C語言
- c++進階(一)C語言條件編譯及編譯預處理階段C++C語言編譯
- 教你在 C 語言上編寫自己的協程
- C語言編寫靜態連結庫及其使用C語言
- 選擇使用c語言編寫的phalcon框架C語言框架
- 線段樹 hate it
- 線段樹模板
- 01 線段樹
- 第一個C語言編譯器是怎樣編寫的?C語言編譯
- 第一個 C 語言編譯器是怎樣編寫的?編譯
- C語言編譯工具C語言編譯
- 機器語言編寫helloworld
- 編譯warp,d語言寫的c/c++前處理器.編譯C++
- Codeforces 52C (線段樹區間更新)
- 線段樹筆記筆記
- 線段樹入門
- 權值線段樹
- C語言:使用指標將兩段字串連線起來輸出C語言指標字串
- C語言中如何寫斷言C語言
- 用 C 語言編寫多程式 Web 伺服器【粗暴版】Web伺服器
- C語言編寫作業系統有什麼好處C語言作業系統
- C語言爬蟲程式編寫的爬取APP通用模板C語言爬蟲APP
- 用 C 語言編寫一個簡單的垃圾回收器
- C語言學習的幾個階段C語言
- java開發C語言編譯器:為C語言提供API呼叫JavaC語言編譯API
- 小白說編譯原理-8-簡單minus-c語言編譯樹(支撐類)編譯原理C語言
- Keepalived 2.0.14 釋出,C 語言編寫的路由軟體路由
- 用C語言編寫Linux實用程式的藝術(轉)C語言Linux