DFS序讲解
我們經(jīng)常會(huì)遇到樹的問題,但樹是非線性的結(jié)構(gòu),操作起來始終還是麻煩,如果我們能把樹改造成線性結(jié)構(gòu),有什么方法?對(duì),就是今天要講的DSF序;
dfs序呢,就是把一棵樹區(qū)間化,我們用dfs的方式將它區(qū)間化。
如圖:
dfs序就是:ABDDEEBCFHHFG
其實(shí)就是用dfs全部遍歷一遍,不過我們不能光遍歷還有動(dòng)些小手腳,我們要在遍歷的同時(shí)記錄每個(gè)節(jié)點(diǎn)進(jìn)棧與出棧的時(shí)間序列。
介紹兩個(gè)基本函數(shù):in[x],out[x]
dfs從根節(jié)點(diǎn)開始,這倆函數(shù)就分別記錄每個(gè)節(jié)點(diǎn)x進(jìn)入與離開的時(shí)間戳
還有num[x],表示第x個(gè)節(jié)點(diǎn)的編號(hào)
(具體情況根據(jù),根據(jù)題目來寫)
num生成的就是一個(gè)新秩序,由每個(gè)節(jié)點(diǎn)進(jìn)入關(guān)系而形成的
你仔細(xì)觀察會(huì)發(fā)現(xiàn):
序根節(jié)點(diǎn)的進(jìn)棧時(shí)間<子樹的dfs<根節(jié)點(diǎn)的出棧時(shí)間
這樣不就成一個(gè)區(qū)間了
in[x]~out[x]是x為根節(jié)點(diǎn)的子樹,劃分為一個(gè)區(qū)間
然后什么單點(diǎn)修改,區(qū)間查詢,莫隊(duì)都可以用在樹上,而且dfs序也是樹鏈剖分的前驅(qū)知識(shí)
光說可能不怎么懂,我去找一些題,做完再更新例題
總結(jié)
- 上一篇: 代悦个人资料简历 代悦简介
- 下一篇: 【每日一题】4月7日题目精讲 树