這是我參與8月更文挑戰的第五天,活動詳情查看:8月更文挑戰」前端
前文已經介紹了,棧、隊列、鏈表、集合和字典。今天就該介紹樹這一數據結構,接下來且聽我娓娓道來。markdown
樹是什麼呢?在生活中,你們對樹確定不陌生,不就是一種植物嘛。像楊樹、柳樹、榆樹等等。數據結構
但在計算機科學中就不同了。app
一種 分層
數據的抽象模型,在前端應用普遍。post
前端工做中常見的樹包括: DOM樹、級聯選擇、樹形控件...ui
JS中沒有樹,可是能夠用 Object和Array
構建樹。url
像這樣知足分層數據結構的均可以說是樹。spa
1. 訪問根節點。3d
2. 對根節點的 children
挨個進行深度優先遍歷。code
const tree = {
val: 'a',
children: [
{
val: 'b',
children: [
{
val: 'd',
children: []
}, {
val: 'e',
children: []
}]
},
{
val: 'c',
children: [{
val: 'f',
children: []
}, {
val: 'g',
children: []
}]
}
]
}
const dfs = (root) => {
console.log(root.val);
root.children.forEach(dfs)
}
dfs(tree)
// a b d e c f g
複製代碼
1. 新建一個隊列,把根節點入隊。
2. 把隊頭出隊並訪問。
3. 把對頭的 children
挨個入隊。
4. 重複第2、第三, 直到隊列爲空。
const tree = {
val: 'a',
children: [
{
val: 'b',
children: [
{
val: 'd',
children: []
}, {
val: 'e',
children: []
}]
},
{
val: 'c',
children: [{
val: 'f',
children: []
}, {
val: 'g',
children: []
}]
}
]
}
const dfs = (root) => {
console.log(root.val);
root.children.forEach(dfs)
}
const bfs = (root) => {
const q = [root];
while (q.length > 0) {
const n = q.shift()
console.log(n.val);
n.children.forEach(child => q.push(child))
}
}
bfs(tree)
// a b c d e f g
複製代碼
今天先分享到這裏啦,拜拜~~~