Socket
Socket
Sign inDemoInstall

n-ary-tree

Package Overview
Dependencies
1
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    n-ary-tree

n-ary tree implementation in JavaScript(TypeScript).


Version published
Weekly downloads
65
increased by12.07%
Maintainers
1
Install size
60.9 kB
Created
Weekly downloads
 

Changelog

Source

0.4.0 (2020-11-14)

Features

  • find: find all/last path(s) with a specific value (62f6e05)

Bug Fixes

  • ignore undefined, null type value (f7cd6d4)

Readme

Source

N ary tree

n-ary tree(also known as k-ary or k-way tree) implementation in JavaScript(TypeScript).

Pipeline npm (tag) npm bundle size

Installation

  • Using npm
$ npm i n-ary-tree
  • Using yarn
$ yarn add n-ary-tree

Tree node structures

User-defined tree node fields have supported by all available methods. Just keep the last parameter is a structure like:

type TreeNodeFields<N> = Partial<{
  value: keyof N
  children: keyof N
}>

Default structure fields

{
  value: 'value',
  children: 'children'
}

By default, we will use value field as the value of tree node, children field as the children of tree node.

Examples

{
  value: 'val', // or other field string in the tree node
  children: 'descendants' // or other field string in the tree node
}

val field will be regarded as node actual value, descendants field in the tree node will be regraded as node children field.

APIs

findNodes

Get all matched nodes.

export function findNodes<N extends Record<string, any>, V = any>(
  root: N,
  targets: V[],
  fields?: TreeNodeFields<N>
): FindNodesResult<N, V>
import { findNodes } from 'n-ary-tree'

interface DefaultTreeNode {
  value: number
  children?: DefaultTreeNode[]
}

const tree: DefaultTreeNode = {
  value: 1,
  children: [
    {
      value: 11,
      children: [
        {
          value: 111
        }
      ]
    },
    {
      value: 12,
      children: [
        {
          value: 121
        }
      ]
    }
  ]
}

findNodes(tree, [111])
// -> {
//      nodes: [{ value: 111 }],
//      values: [111]
//    }
findNodes(tree, [111], { value: 'value', children: 'children' })
// Equivalent to findNodes(tree, [111]), { value: 'value', children: 'children' }
// is default preset.

findPathNodes

Get nodes sequences if tree path exist.

import { findPathNodes } from 'n-ary-tree'

findPathNodes(tree, [1, 11, 111])
/**
 * [
 *   { value: 1, children: ... },
 *   { value: 11, children: ... },
 *   { value: 111, children: ...}
 * ]
 */

findPathNodes(tree, [1, 9])
/**
 * [
 *   { value: 1, children: ... }
 * ]
 */

findPath

Find the latest matched path.

import { findPath } from 'n-ary-tree'

findPath(tree, [121])
/**
 * [
 *   { value: 1, children: ... },
 *   { value: 12, children: ... },
 *   { value: 121, children: ...}
 * ]
 */
findPath(tree, [22]) // []

findAllPaths

Find all matched paths.

import { findAllPaths } from 'n-ary-tree'

const tree = {
  value: 1,
  children: [
    {
      value: 111
    },
    {
      value: 11,
      children: [
        {
          value: 111
        }
      ]
    },
    {
      value: 12,
      children: [
        {
          value: 121
        }
      ]
    }
  ]
}

findAllPaths(tree, [111])
/**
 * [
 *    [
 *      { value: 1, children: ... },
 *      { value: 111, children: ... },
 *    ],
 *    [
 *      { value: 1, children: ... },
 *      { value: 11, children: ... },
 *      { value: 111, children: ...}
 *    ]
 * ]
 */

Traversal

We have support 3 kinds of common tree traversal methods: level-order(BFS), pre-order(DFS), post-order(DFS).

levelorder
const tree = {
  val: 1,
  children: [
    {
      val: 2
    }
  ]
}
levelorder(tree, { value: 'val' })
// [[1], [2]]
preorder
const tree = {
  value: 1,
  descendants: [
    {
      value: 2
    }
  ]
}
preorder(tree, { children: 'descendants' })
// [1, 2]
postorder
const tree = {
  val: 1,
  descendants: [
    {
      val: 2
    }
  ]
}
postorder(tree, { value: 'val', children: 'descendants' })
// [2, 1]

License

MIT © Liu Bowen

Keywords

FAQs

Last updated on 14 Nov 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc