Skip to main content

Tree Node More

上一篇我們小玩了一下 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

首先我們需要的 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 ,

敬請期待...

此文同時發布於鐵人賽