码迷,mamicode.com
首页 > 其他好文 > 详细

[Algorithm] Tree Width with Level Width

时间:2019-08-11 23:24:00      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:nts   int   lse   des   push   idt   div   ports   dex   

// --- Directions
// Given the root node of a tree, return
// an array where each element is the width
// of the tree at each level.
// --- Example
// Given:
//     0
//   / |  \
// 1   2   3
// |       |
// 4       5
// Answer: [1, 3, 2]

 

function levelWidth(root) {
  let counts = [0];
  let levels = [root, "$end$"];
  // [1, 3, 2]
  // ["e"]

  while (levels.length > 1) {
    const current = levels.shift();
    if (current === "$end$") {
      counts[counts.length] = 0;
      levels.push("$end$");
    } else {
      const { children } = current;
      for (let node of children) {
        levels.push(node);
      }
      counts[counts.length - 1]++;
    }
  }

  return counts;
}

module.exports = levelWidth;

 

Test:

const Node = require(‘./node‘);
const levelWidth = require(‘./index‘);

test(‘levelWidth is a function‘, () => {
  expect(typeof levelWidth).toEqual(‘function‘);
});

test(‘levelWidth returns number of nodes at widest point‘, () => {
  const root = new Node(0);
  root.add(1);
  root.add(2);
  root.add(3);
  root.children[0].add(4);
  root.children[2].add(5);

  expect(levelWidth(root)).toEqual([1, 3, 2]);
});

test(‘levelWidth returns number of nodes at widest point‘, () => {
  const root = new Node(0);
  root.add(1);
  root.children[0].add(2);
  root.children[0].add(3);
  root.children[0].children[0].add(4);

  expect(levelWidth(root)).toEqual([1, 1, 2, 1]);
});

 

[Algorithm] Tree Width with Level Width

标签:nts   int   lse   des   push   idt   div   ports   dex   

原文地址:https://www.cnblogs.com/Answer1215/p/11336949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!