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語言編寫貪食蛇程式原始碼C語言原始碼
- 用C語言編寫小遊戲——“井字棋”C語言遊戲
- 教你在 C 語言上編寫自己的協程
- 淺談c語言程式碼段 資料段 bss段C語言
- 線段樹模板重製(自寫自用)
- 手機寫作業系統之 使用C語言編寫核心作業系統C語言
- 編譯warp,d語言寫的c/c++前處理器.編譯C++
- 線~段~樹
- 線段樹
- Keepalived 2.0.14 釋出,C 語言編寫的路由軟體路由
- 機器語言編寫helloworld
- 個人線段樹寫法 & 注意逝項
- C語言 - 條件編譯C語言編譯
- C語言-檔案讀寫C語言
- C語言爬蟲程式編寫的爬取APP通用模板C語言爬蟲APP
- 用 C 語言編寫多程式 Web 伺服器【粗暴版】Web伺服器
- C語言編寫作業系統有什麼好處C語言作業系統
- 線段樹模板
- 線段樹--RMQMQ
- 01 線段樹
- 線段樹 hate it
- 【模版】線段樹
- 9 SystemVerilog語言編寫SPI接收
- C語言學習的幾個階段C語言
- C語言:使用指標將兩段字串連線起來輸出C語言指標字串
- C135 線段樹分治 P5631 最小mex生成樹
- Cython,一個簡化 Python 編寫 C 擴充套件的語言Python套件
- c語言多檔案編譯C語言編譯
- ut.cpp 最大線段並減線段交 [線段樹]
- 權值線段樹
- 線段樹筆記筆記
- Segment Tree(線段樹)
- 線段樹入門
- 李超線段樹
- 線段樹進階
- AVL樹(查詢、插入、刪除)——C語言C語言
- 實驗1 C語言輸入輸出和簡單程式編寫C語言