本文同時發布於好讀整理版
上一篇我們小玩了一下 Tree 裡面 Node (節點)實作加資料,這邊我們來想想怎麼移除資料。
若以 js 做我們可以用 Array.prototype.filter()
達到過濾資料的效果,
以下是 MDN 的 filter 範例 :
function isBigEnough(data)) {
return data >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
filter(fn) 原本是拿到 fn 裡面 return 的 data,
那我們反過來做,做一個反向思考,
只要把不是 filter 裡面的引數拿出來,重新宣告給陣列,就可以達成移除資料(data)的效果啦 !
因此可以這樣做 remove(data)
:
class Node {
constructor(data) {
this.data = data;
this.children = [];
}
add(data) {
const node = new Node(data);
this.children.push(node);
}
remove(data) {
this.children = this.children.filter((node) => {
return node.data !== data;
});
}
}
不要忘了 filter 完之後,重新宣告給 this.children
。
因為 filter 之後過的陣列會是新的陣列,在這裡我們要覆蓋舊陣列。
首先我們需要的 Tree 初始化應該要有一個 root node ,為空值。
class Tree {
constructor(){
this.root = null;
}
}
然後就可以做之前我們的 add(data)
功能,跟 remove(data)
功能。
如果要開始使用 Tree 會塞給它一個 node,實作如下 :
const node = new Node(2);
const tree = new Tree();
tree.root = node;
之後我們就可以做其他 Tree 的功能了,
Java 部分會等到比較多 Tree 的方法時再一起實作,避免重複敘述概念。
後續章節會介紹兩種 疊代 tree (走訪每個元素)的方法 :
分別為 Breadth 與 Depth First ,
敬請期待...
本文同時發布於好讀整理版