iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
Software Development

One Punch 一拳搞定前後端面試系列 第 22

[One Punch 一拳搞定前後端面試] DAY-22 - Tree 之 Node

  • 分享至 

  • xImage
  •  

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 ,

敬請期待...

本文同時發布於好讀整理版


上一篇
[One Punch 一拳搞定前後端面試] DAY-21 - Tree 結構
下一篇
[One Punch 一拳搞定前後端面試] DAY-23 - Tree Breadth First Traversal
系列文
One Punch 一拳搞定前後端面試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言