真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

javascript樹,javascript樹形圖

JS樹結構數據的遍歷

title: JS樹結構數據的遍歷

成都創(chuàng)新互聯公司主營扶綏網站建設的網絡公司,主營網站建設方案,成都app軟件開發(fā),扶綏h5微信小程序定制開發(fā)搭建,扶綏網站營銷推廣歡迎扶綏等地區(qū)企業(yè)咨詢

date: 2022-04-14

description: 針對項目中出現樹形結構數據的時候,我們怎樣去操作他

項目中我們會經常出現對樹形結構的遍歷、查找和轉換的場景,比如說DOM樹、族譜、社會機構、組織架構、權限、菜單、省市區(qū)、路由、標簽等等。那針對這些場景和數據,我們又如何去遍歷和操作,有什么方式或者技巧可以簡化我們的實現思路。下面我們將針對常規(guī)出現的場景去總結一下我們的遍歷方式

樹的特點

1、每個節(jié)點都只有有限個子節(jié)點或無子節(jié)點;

2、沒有父節(jié)點的節(jié)點稱為根節(jié)點;

3、每一個非根節(jié)點有且只有一個父節(jié)點;

4、除了根節(jié)點外,每個子節(jié)點可以分為多個不相交的子樹;

5、樹里面沒有環(huán)路

下面的圖片表示一顆樹

在下面的JS中我們由多棵樹組成我們的數據

在這數據中我們如何評判數據是否為葉節(jié)點(也就是最后一級),我們每個節(jié)點都會存在children屬性,如果不存在children屬性或者children不是一個數組或者children為數組且長度為0我們則認為他是一個葉節(jié)點

我們針對樹結構的操作離不開遍歷,遍歷的話又分為廣度優(yōu)先遍歷、深度優(yōu)先遍歷。其中深度優(yōu)先遍歷可以通過遞歸和循環(huán)的方式實現,而廣度優(yōu)先遍歷的話是非遞歸的

從上往下對每一層依次訪問,在每一層中,從左往右(也可以從右往左)訪問結點,訪問完一層就進入下一層,直到沒有結點可以訪問為止。即訪問樹結構的第n+1層前必須先訪問完第n層。

簡單的說,BFS是從根節(jié)點開始,沿著樹的寬度遍歷樹的節(jié)點。如果所有節(jié)點均被訪問,則算法中止。

所以我們的實現思路是,維護一個隊列,隊列的初始值為樹結構根節(jié)點組成的列表,重復執(zhí)行以下步驟直到隊列為空:

取出隊列中的第一個元素,進行訪問相關操作,然后將其后代元素(如果有)全部追加到隊列最后。

深度優(yōu)先搜索算法(英語:Depth-First-Search,DFS)是一種用于遍歷或搜索樹或圖的算法。這個算法會盡可能深的搜索樹的分支。當節(jié)點v的所在邊都己被探尋過,搜索將回溯到發(fā)現節(jié)點v的那條邊的起始節(jié)點。這一過程一直進行到已發(fā)現從源節(jié)點可達的所有節(jié)點為止。如果還存在未被發(fā)現的節(jié)點,則選擇其中一個作為源節(jié)點并重復以上過程,整個進程反復進行直到所有節(jié)點都被訪問為止

1、先序遍歷

訪問子樹的時候,先訪問根再訪問根的子樹

2、后序遍歷

訪問子樹的時候,先訪問子樹再訪問根

1、先序遍歷

先序遍歷與廣度優(yōu)先循環(huán)實現類似,要維護一個隊列,不同的是子節(jié)點不追加到隊列最后,而是加到隊列最前面

2、后序遍歷

后序遍歷就略微復雜一點,我們需要不斷將子樹擴展到根節(jié)點前面去,執(zhí)行列表遍歷,并且通過一個臨時對象維護一個id列表,當遍歷到某個節(jié)點如果它沒有子節(jié)點或者它本身已經存在于我們的臨時id列表,則執(zhí)行訪問操作,否則繼續(xù)擴展子節(jié)點到當前節(jié)點前面

對于樹結構的遍歷操作,其實遞歸是最基礎,也是最容易理解的。遞歸本身就是循環(huán)的思想,所以可以用循環(huán)來改寫遞歸,以上的方式在項目中已經廊括了大部分的場景了,我們在日常開發(fā)中可以根據場景或者需要去選擇我們的遍歷方式,或者基于此對他進行調整和優(yōu)化,至于每種方式的空間復雜度和時間復雜度我們在這個地方就不去嘗試了,各位感興趣可以自己去驗證。

廣度優(yōu)先搜索

樹的遍歷

深度優(yōu)先搜索

圖文詳解兩種算法:深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS)

二叉樹遍歷(前序,后序,中序,層次)遞歸與迭代實現JavaScript

JS樹結構操作:查找、遍歷、篩選、樹和列表相互轉換

js廣度遍歷生成樹,樹的定義

先序,后序,中序針對二叉樹。

深度、廣度針對普通樹。深度遍歷:從樹根開始掃描,頂層掃描完了,從一層最左(也可以右)面的結點往下層掃描,直到下層已無結點,這時所有靠最左(右)的結點全部掃描完畢,從樹梢往上退一層,看這層旁有無兄弟結點,有的話還是一樣從最左(右)邊開始掃描,這是個遞歸概念,利用這一方法來遍歷整棵樹。廣度遍歷:從樹根開始掃描,頂層掃描完了,掃描一層的所有結點,掃描二層的所有結點,,掃描最底層的結點。

JS樹結構生成與獲取到根節(jié)點的路徑

我們僅僅知道用戶點擊的那一條數據,所以這條數據必須是唯一的才能構建一顆唯一的樹結構,如果后端給不到你唯一的值,一定要讓他給你生成一個唯一值id

我采用的string切割插入值

table初始化進來只有一層,并且是固定的

此時生成的是


本文名稱:javascript樹,javascript樹形圖
鏈接URL:http://weahome.cn/article/dsigdod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部