mathjs
Version:
Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with dif
46 lines (44 loc) • 1.18 kB
JavaScript
import { csTdfs } from './csTdfs'
/**
* Post order a tree of forest
*
* @param {Array} parent The tree or forest
* @param {Number} n Number of columns
*
* Reference: http://faculty.cse.tamu.edu/davis/publications.html
*/
export function csPost (parent, n) {
// check inputs
if (!parent) { return null }
// vars
let k = 0
let j
// allocate result
const post = [] // (n)
// workspace, head: first n entries, next: next n entries, stack: last n entries
const w = [] // (3 * n)
const head = 0
const next = n
const stack = 2 * n
// initialize workspace
for (j = 0; j < n; j++) {
// empty linked lists
w[head + j] = -1
}
// traverse nodes in reverse order
for (j = n - 1; j >= 0; j--) {
// check j is a root
if (parent[j] === -1) { continue }
// add j to list of its parent
w[next + j] = w[head + parent[j]]
w[head + parent[j]] = j
}
// loop nodes
for (j = 0; j < n; j++) {
// skip j if it is not a root
if (parent[j] !== -1) { continue }
// depth-first search
k = csTdfs(j, k, w, head, next, post, stack)
}
return post
}