[Algorithm] Tree Width with Level Width

// --- 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]);
});

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

时间: 2024-10-08 06:21:13

[Algorithm] Tree Width with Level Width的相关文章

css中width:auto和width:100%的区别是什么

width的值一般是这样设置的: 1,width:50px://宽度设为50px 2,width:50%://宽度设为父类宽度的50% 3,还有一个值是auto(默认值),宽度是自动的,随着内容的增加而增加,随着浏览器的宽度而换行 width:auto和width:100%的区别: 一.width:auto 1.块级元素默认的宽度值,意味着浏览器会自己选择一个合适的宽度值. 2.内容的宽度='margin-left' + 'border-left-width' + 'padding-left'

width:auto; 和 width:100%;的不同

width:auto:会将元素撑开至整个父元素width,但是会减去子节点自己的margin,padding或者border的大小.width:100%:会强制将元素变成和父元素一样的宽,并且添加额外的空间到这个元素的width上.就是因为这个,会导致很多问题. 使用width:100%永远都不是一个好主意.这个属性容易让人产生你正在定义一个元素可视大小,其实,你是在对这个元素的状态做了巨大的改变. 块元素会填满其父元素的整个width,因为块元素默认的是width:auto;的. See th

CSS的width:100%和width:auto区别

CSS的width:100%和width:auto区别 一.   问题 前段时间在调整树结构的时候,发现如果树的节点名称比较长的话在IE6下则不会撑开外面的元素,导致节点的名称只显示了一半,同时图标和名称换行显示了,但是在IE8和IE9下则显示正常.定位到问题后,最终发现是下面的属性导致的,如下图红色所致,把width的值设置为auto后即可解决问题: .TreeView,.TreeView ul{ padding:0px 0px 0px  19px; list-style:none; marg

width:100%和width:inherit

前几天遇到过这么一个问题.我想让子盒子的宽度等于父盒子的宽度.父盒子宽度为一个具体值比如说200px.我将子盒子宽度设为了100%.按道理说应该是可以等于父盒子的宽度的,但结果并没有,而是通栏了.然后我又将子盒子宽度设为了inherit.结果宽度就是父盒子的宽度了. HTML结构如下: <body> <div class="parent"> <div class="child"> hello world </div>

css width=&quot;100&quot; style =&quot;width:100px&quot; 区别

1. width="100"是正确的,而 width="100px"是错误的, style = "width:100px"是正确的 2. style ="width:100px"优先级较高 3. 只有有限的元素支持width="100"属性,例如table, td等 4. JQuery中获取width如下 <div style="width:200px;height:200px;"

style=&quot;width:100px&quot; 和width=100 异同

异: 1.width属性不是每个元素都支持的,一般就table和body支持. 2.style="width: 100px"是CSS样式. 2.1.CSS样式有多种方式设置,直接写成这个样子属于内联CSS,也可以把这个提出来单独放到<style>里 <html> <head>    <style>      .mydiv { width: 100px; }      div { background-color: #ddd; margin

html加javascript和canvas类似超级玛丽游戏

html加javascript和canvas制作 代码来源于网上 复制可用 <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author" content=

[LeetCode] Maximum Width of Binary Tree 二叉树的最大宽度

Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null. The width of one level

[leetcode-662-Maximum Width of Binary Tree]

Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null. The width of one level