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 語言上編寫自己的協程
- C語言編寫靜態連結庫及其使用C語言
- 選擇使用c語言編寫的phalcon框架C語言框架
- 淺談c語言程式碼段 資料段 bss段C語言
- c++進階(一)C語言條件編譯及編譯預處理階段C++C語言編譯
- 第一個C語言編譯器是怎樣編寫的?C語言編譯
- 第一個 C 語言編譯器是怎樣編寫的?編譯
- 手機寫作業系統之 使用C語言編寫核心作業系統C語言
- C語言編譯工具C語言編譯
- 線段樹 hate it
- 【模版】線段樹
- 01 線段樹
- 線段樹--RMQMQ
- 李超線段樹
- 線段樹模板
- 機器語言編寫helloworld
- 編譯warp,d語言寫的c/c++前處理器.編譯C++
- ut.cpp 最大線段並減線段交 [線段樹]
- C語言 - 條件編譯C語言編譯
- C語言中如何寫斷言C語言
- C語言-檔案讀寫C語言
- C語言:使用指標將兩段字串連線起來輸出C語言指標字串
- Codeforces 52C (線段樹區間更新)
- 線段樹筆記筆記