樹形資料的搜尋方法 javascript

2021-08-19 14:04:14 字數 1549 閱讀 2765

假設有這樣的問題。給乙個如下資料結構的資料。然後求id=01001002text值。

var tree = [,]}]

},] }]

}];

這是個很明顯的多叉樹的樹形結構,一般情況下,對於這種樹形結構一般採用深度優先遍歷和廣度優先遍歷。

深度優先遍歷的原則是:

1. 從頂點開始;

2. 如果當前節點有子節點,則遍歷當前節點的所有子節點;

// 遞迴實現

function

deepsearch

(tree)

}}// 非遞迴

function

deepsearch

(tree)

console.log(temp);

}}

回到我們的問題,我們可以給出以下兩種解法:

// 遞迴

function

deepquery

(tree,id)

if(id === tree[i].id || isget) }}

deepsearch(tree,id);

return retnode;

}// 非遞迴

function

deepquery

(tree, id)

if(id === temp.id)

}}

遞迴沒辦法及時跳出迴圈,所以在外面定義乙個標記為,表示有沒有找到要搜尋的結果,如果找到,則跳出後續的迴圈。非遞迴的直接找到結果的時候return就行。

廣度優先遍歷的原則是:

1. 從根節點開始;

2. 遍歷所有子節點;

3. 從第乙個子節點開始再執行廣度優先遍歷。

**如下:

function

breadthsearch

(tree)

console.log(temp);

}}

針對我們的問題的解法:

function

breadthquery

(tree, id)

if(temp.id === id)

}}

當資料沒有規則的時候,我們通常只能使用遍歷的方式來搜尋我們想要的資料。但是假設我們的資料有這樣的特點:

1. id由八位數字構成;

2. 1-2位表示省;

3. 3-5位表示市;

4. 6-8位表示縣;

5. 預設用0代替,比如北京的省級的id1,則北京這個省級區域的id的為01000000

則這時候給我們乙個id,我們就可以快速獲得他的各個層級的id了,以便於快速定位。這種方式只適合於那種層級固定的且id有一定規則的資料。

樹形資料轉換

測試資料 create table project id int,name nvarchar 20 parent id int insert project select 1,所有專案 null union all select 2,專案1 1 union all select 3,專案2 1 cr...

樹形資料轉換

測試資料 create table project id int,name nvarchar 20 parent id int insert project select 1,所有專案 null union all select 2,專案1 1 union all select 3,專案2 1 cr...

樹形資料轉換

測試資料 create table project id int,name nvarchar 20 parent id int insert project select 1,所有專案 null union all select 2,專案1 1 union all select 3,專案2 1 cr...