Javascript遞歸樹型結構,指的是通過遞歸算法實現樹型結構。在實際開發中,樹型結構是非常常見的一種數據結構。我們可以通過使用遞歸算法來實現樹型結構,實現對樹形結構的操作。
舉個栗子,我們可以考慮下面這個場景:一個公司有很多個部門,每個部門下又有很多員工,員工還可能再細分為多個子部門,如何用 JavaScript 來實現樹型結構的操作呢?
// 創建原始數據 let company = { "公司": { "CEO": "張三", "人力資源部": { "部長": "李四", "員工1": "王五", "員工2": "趙六" }, "銷售部": { "部長": "孫七", "員工1": "周八", "員工2": "吳九", "銷售一部": { "主管": "李十", "員工1": "魯十一", "員工2": "金十二" } } } }
以上就是我們需要操作的數據結構,公司是根節點,而下面有多層的子節點,需要通過遞歸算法來實現。
// 遞歸遍歷樹型結構代碼 function print(node, deep) { let t = ""; for (let i = 0; i < deep; i++) { t += "-"; } console.log(t + node.name); if (node.children) { for (let i = 0; i < node.children.length; i++) { print(node.children[i], deep + 1); } } } let tree = { name: "公司", children: [ { name: "CEO", }, { name: "人力資源部", children: [ { name: "部長", }, { name: "員工1", }, { name: "員工2", } ] }, { name: "銷售部", children: [ { name: "部長", }, { name: "員工1", }, { name: "員工2", }, { name: "銷售一部", children: [ { name: "主管", }, { name: "員工1", }, { name: "員工2", }, ] } ] } ] } // 輸出結果 print(tree, 0);
在這段代碼中,我們定義了一個 print 函數。這個函數接收兩個參數:節點和當前深度。如果當前節點存在 children,我們就繼續遍歷下一個節點的子節點,直到子節點的 children 為空。通過遞歸,我們就能夠遍歷整個樹形結構。
并且我們也可以通過遞歸算法來找到某一個節點的子節點,示例如下:
// 查找某個節點 function search(node, name) { if (node.name === name) { console.log(node); } else if (node.children) { for (let i = 0; i < node.children.length; i++) { search(node.children[i], name); } } } // 輸出結果 search(tree, "員工1");
通過以上這些操作,我們就能夠靈活地操作 JavaScript 中的樹型結構數據了。