Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

data-footstone

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

data-footstone - npm Package Compare versions

Comparing version 0.1.18 to 0.1.20-beta.1

tscDist/chain.js

47

dist_cjs/tree.js

@@ -6,4 +6,2 @@ 'use strict';

// 需要添加该type
// to test
class BinaryTreeNode {

@@ -74,2 +72,10 @@ constructor(v) {

}
attachAsLeft(parent, node) {
parent.left = node;
node && (node.parent = parent);
}
attachAsRight(parent, node) {
parent.right = node;
node && (node.parent = parent);
}
_preOrderTraverse(cb, node) {

@@ -213,3 +219,2 @@ if (node) {

// 每个节点的出度是 0 或 2.
// to test
isProper() {

@@ -245,3 +250,2 @@ if (!this.root) {

// 叶子节点在最后一层上的真二叉树。
// to test
isFull() {

@@ -253,3 +257,2 @@ let p = this.height();

// 非最后一层为满二叉树,最后一层从左到右分布。
// to test
isComplete() {

@@ -307,3 +310,7 @@ let h = this.height();

clone() {
return new BinarySearchTreeNode(this.key, this.value);
let res = new BinarySearchTreeNode(this.key, this.value);
res.left = this.left;
res.right = this.right;
res.parent = this.parent;
return res;
}

@@ -382,3 +389,2 @@ 'operator<'(otherNode) {

}
// to test
class BinarySearchTree extends BinaryTree {

@@ -388,2 +394,3 @@ constructor() {

this.root = null;
// this._hot = null // 记忆热点
}

@@ -432,7 +439,15 @@ createBSTNode(k, v) {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// searchIn(k: N, node: BinarySearchTreeNodeOrNull<T>) {
// if (!node || k === node.key) {
// return node
// }
// this._hot = node
// return this.searchIn(k, k < node.key ? node.left : node.right)
// }
// 若存在则返回节点,否则返回null
search(k, node = this.root) {
// return this.searchIn(k, node)
if (!node || node.key === k) {

@@ -557,3 +572,2 @@ return node;

}
// to test
class AVLTree extends BinarySearchTree {

@@ -618,6 +632,6 @@ constructor() {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// _insertNode(node: AVLTN<T>, newNode: AVLTN<T>): AVLTN<T> {
// _insertNode(node: BSTN<T>, newNode: BSTN<T>): BSTN<T> {
// if (!node) {

@@ -697,5 +711,2 @@ // node = newNode

c.parent = b;
// console.log('a', a)
// console.log('b', b)
// console.log('c', c)
return b; // 返回该子树的根节点

@@ -708,8 +719,4 @@ }

let g = p.parent;
// console.log('v', v)
// console.log('p', p)
// console.log('g', g)
if (p['operator==='](g.left)) {
if (v['operator==='](p.left)) {
// console.log('left left p')
// v p g

@@ -719,3 +726,2 @@ return this._connect34(v, p, g, v.left, v.right, p.right, g.right);

else {
// console.log('left right p')
// p v g

@@ -726,5 +732,3 @@ return this._connect34(p, v, g, p.left, v.left, v.right, g.right);

else {
// console.log('right g')
if (v['operator==='](p.left)) {
// console.log('right left p')
// g v p

@@ -734,3 +738,2 @@ return this._connect34(g, v, p, g.left, v.left, v.right, p.right);

else {
// console.log('right right p')
// g p v

@@ -737,0 +740,0 @@ return this._connect34(g, p, v, g.left, p.left, v.left, v.right);

import { Queue } from './queue.js';
import { Stack } from './stack.js';
// 需要添加该type
// to test
class BinaryTreeNode {

@@ -71,2 +69,10 @@ constructor(v) {

}
attachAsLeft(parent, node) {
parent.left = node;
node && (node.parent = parent);
}
attachAsRight(parent, node) {
parent.right = node;
node && (node.parent = parent);
}
_preOrderTraverse(cb, node) {

@@ -210,3 +216,2 @@ if (node) {

// 每个节点的出度是 0 或 2.
// to test
isProper() {

@@ -242,3 +247,2 @@ if (!this.root) {

// 叶子节点在最后一层上的真二叉树。
// to test
isFull() {

@@ -250,3 +254,2 @@ let p = this.height();

// 非最后一层为满二叉树,最后一层从左到右分布。
// to test
isComplete() {

@@ -304,3 +307,7 @@ let h = this.height();

clone() {
return new BinarySearchTreeNode(this.key, this.value);
let res = new BinarySearchTreeNode(this.key, this.value);
res.left = this.left;
res.right = this.right;
res.parent = this.parent;
return res;
}

@@ -379,3 +386,2 @@ 'operator<'(otherNode) {

}
// to test
class BinarySearchTree extends BinaryTree {

@@ -385,2 +391,3 @@ constructor() {

this.root = null;
// this._hot = null // 记忆热点
}

@@ -429,7 +436,15 @@ createBSTNode(k, v) {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// searchIn(k: N, node: BinarySearchTreeNodeOrNull<T>) {
// if (!node || k === node.key) {
// return node
// }
// this._hot = node
// return this.searchIn(k, k < node.key ? node.left : node.right)
// }
// 若存在则返回节点,否则返回null
search(k, node = this.root) {
// return this.searchIn(k, node)
if (!node || node.key === k) {

@@ -554,3 +569,2 @@ return node;

}
// to test
class AVLTree extends BinarySearchTree {

@@ -615,6 +629,6 @@ constructor() {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// _insertNode(node: AVLTN<T>, newNode: AVLTN<T>): AVLTN<T> {
// _insertNode(node: BSTN<T>, newNode: BSTN<T>): BSTN<T> {
// if (!node) {

@@ -694,5 +708,2 @@ // node = newNode

c.parent = b;
// console.log('a', a)
// console.log('b', b)
// console.log('c', c)
return b; // 返回该子树的根节点

@@ -705,8 +716,4 @@ }

let g = p.parent;
// console.log('v', v)
// console.log('p', p)
// console.log('g', g)
if (p['operator==='](g.left)) {
if (v['operator==='](p.left)) {
// console.log('left left p')
// v p g

@@ -716,3 +723,2 @@ return this._connect34(v, p, g, v.left, v.right, p.right, g.right);

else {
// console.log('left right p')
// p v g

@@ -723,5 +729,3 @@ return this._connect34(p, v, g, p.left, v.left, v.right, g.right);

else {
// console.log('right g')
if (v['operator==='](p.left)) {
// console.log('right left p')
// g v p

@@ -731,3 +735,2 @@ return this._connect34(g, v, p, g.left, v.left, v.right, p.right);

else {
// console.log('right right p')
// g p v

@@ -734,0 +737,0 @@ return this._connect34(g, p, v, g.left, p.left, v.left, v.right);

{
"name": "data-footstone",
"version": "0.1.18",
"version": "0.1.20-beta.1",
"description": "data structure",

@@ -9,2 +9,3 @@ "author": "feigebaobei <18515195415@163.com>",

"type": "module",
"types": "./tscDist/src/index.d.ts",
"directories": {

@@ -16,4 +17,4 @@ "lib": "lib",

".": {
"import": "./dist_esm/index.js",
"require": "./dist_cjs/index.js"
"import": "./tscDist/index.js",
"types": "./tscDist/src/index.d.ts"
}

@@ -30,2 +31,3 @@ },

"rollup": "rollup -c",
"build": "rollup -c rollup_ts.config.js",
"clean": "echo 'fo clean'",

@@ -47,9 +49,9 @@ "compile": "tsc && npm run rollup",

"dist_cjs",
"dist_esm"
"dist_esm",
"typings"
],
"keywords": [
"data",
"structure",
"data-footstone",
"data",
"footstone",
"structure",

@@ -86,2 +88,3 @@ "construction",

"@jest/globals": "^29.3.1",
"@rollup/plugin-typescript": "^11.1.2",
"@types/jest": "^29.2.4",

@@ -94,3 +97,3 @@ "@types/node": "^14.11.2",

},
"gitHead": "3a87c44524b56a0772f9a3ce4b47bcf1ea9d6771"
"gitHead": "78bbeaff332c959b3eccef9563a139d434923f4d"
}

@@ -12,6 +12,22 @@ # data-footstone

- queue
- PriorityQueue
- chain
- SingleChain
- DoublyChain
- SingleCircleChain
- DoublyCircleChain
- hashMap
- hash 方法
- tree
- ……
- graph 简单
- BinaryTree
- BinarySearchTree
- AVLTree
- graph
- DirectionGraph
- UndirectionGraph
- sort
- cache
- fifo
- lru
- lfu

@@ -27,8 +43,11 @@ ## install

let s = new Stack()
s.push(1, 2, 3, 4)
s.push(1) // 压入栈
s.push(2)
s.push(3)
s.push(4)
s.toArray() // [1,2,3,4]
s.pop() // 4
s.pop() // 4 弹出栈顶元素
s.pop() // 3
s.peek() // 2
s.isEmpty() // false
s.peek() // 2 返回栈顶元素
s.isEmpty() // false 是否空栈
s.clear() // 清空栈

@@ -35,0 +54,0 @@ ```

import { Queue } from './queue';
import { Stack } from './stack';
// 需要添加该type
// to test
class BinaryTreeNode {

@@ -70,2 +68,10 @@ constructor(v) {

}
attachAsLeft(parent, node) {
parent.left = node;
node && (node.parent = parent);
}
attachAsRight(parent, node) {
parent.right = node;
node && (node.parent = parent);
}
_preOrderTraverse(cb, node) {

@@ -209,3 +215,2 @@ if (node) {

// 每个节点的出度是 0 或 2.
// to test
isProper() {

@@ -241,3 +246,2 @@ if (!this.root) {

// 叶子节点在最后一层上的真二叉树。
// to test
isFull() {

@@ -249,3 +253,2 @@ let p = this.height();

// 非最后一层为满二叉树,最后一层从左到右分布。
// to test
isComplete() {

@@ -305,3 +308,7 @@ let h = this.height();

clone() {
return new BinarySearchTreeNode(this.key, this.value);
let res = new BinarySearchTreeNode(this.key, this.value);
res.left = this.left;
res.right = this.right;
res.parent = this.parent;
return res;
}

@@ -380,3 +387,2 @@ 'operator<'(otherNode) {

}
// to test
class BinarySearchTree extends BinaryTree {

@@ -386,2 +392,3 @@ constructor() {

this.root = null;
// this._hot = null // 记忆热点
}

@@ -430,7 +437,15 @@ createBSTNode(k, v) {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// searchIn(k: N, node: BinarySearchTreeNodeOrNull<T>) {
// if (!node || k === node.key) {
// return node
// }
// this._hot = node
// return this.searchIn(k, k < node.key ? node.left : node.right)
// }
// 若存在则返回节点,否则返回null
search(k, node = this.root) {
// return this.searchIn(k, node)
if (!node || node.key === k) {

@@ -555,3 +570,2 @@ return node;

}
// to test
class AVLTree extends BinarySearchTree {

@@ -616,6 +630,6 @@ constructor() {

}
// return newNode // 考虑是否返回插入的节点
return newNode; // 考虑是否返回插入的节点
}
}
// _insertNode(node: AVLTN<T>, newNode: AVLTN<T>): AVLTN<T> {
// _insertNode(node: BSTN<T>, newNode: BSTN<T>): BSTN<T> {
// if (!node) {

@@ -695,5 +709,2 @@ // node = newNode

c.parent = b;
// console.log('a', a)
// console.log('b', b)
// console.log('c', c)
return b; // 返回该子树的根节点

@@ -706,8 +717,4 @@ }

let g = p.parent;
// console.log('v', v)
// console.log('p', p)
// console.log('g', g)
if (p['operator==='](g.left)) {
if (v['operator==='](p.left)) {
// console.log('left left p')
// v p g

@@ -717,3 +724,2 @@ return this._connect34(v, p, g, v.left, v.right, p.right, g.right);

else {
// console.log('left right p')
// p v g

@@ -724,5 +730,3 @@ return this._connect34(p, v, g, p.left, v.left, v.right, g.right);

else {
// console.log('right g')
if (v['operator==='](p.left)) {
// console.log('right left p')
// g v p

@@ -732,3 +736,2 @@ return this._connect34(g, v, p, g.left, v.left, v.right, p.right);

else {
// console.log('right right p')
// g p v

@@ -768,2 +771,121 @@ return this._connect34(g, p, v, g.left, p.left, v.left, v.right);

}
class SplayTree extends BinarySearchTree {
constructor() {
super();
}
splay(v) {
if (!v) {
return null;
}
let p = v.parent;
if (!p) {
return v;
} // 已经是根节点就不用再伸展了。
let g = p.parent;
while (p && g) {
let gg = g.parent; // 未旋转时v的曾祖父。是旋转后v的父。
if (v.isLeft()) {
if (p.isLeft()) {
// 当前结构
// g
// p
// v
// zig-zig
this.attachAsLeft(g, p.right);
this.attachAsRight(p, g);
this.attachAsLeft(p, v.right);
this.attachAsRight(v, p);
}
else {
// 当前结构
// g
// p
// v
// zig-zag
this.attachAsRight(g, v.left);
this.attachAsLeft(v, g);
this.attachAsRight(v, p);
this.attachAsLeft(p, v.right);
}
}
else {
if (p.isRight()) {
// zag-zag
this.attachAsRight(g, p.left);
this.attachAsLeft(p, g);
this.attachAsRight(p, v.left);
this.attachAsLeft(v, p);
}
else {
// zag-zig
this.attachAsLeft(g, v.right);
this.attachAsRight(v, g);
this.attachAsRight(p, v.left);
this.attachAsLeft(v, p);
}
}
if (!gg) {
// 可删除
v.parent = null; // 根节点parent=null
}
else {
if (gg.left['operator=='](g)) {
this.attachAsLeft(gg, v);
}
else {
this.attachAsRight(gg, v);
}
}
p = v.parent;
if (p) {
g = p.parent;
}
else {
g = null;
}
}
if (p && p['operator==='](v.parent)) { // 最后一次可能是单旋转
if (v.isLeft()) {
this.attachAsLeft(p, v.right);
this.attachAsRight(v, p);
}
else {
this.attachAsRight(p, v.left);
this.attachAsLeft(v, p);
}
}
v.parent = null; // 到达树根后,设置parent=null
this.root = v;
return v;
}
searchSplayTreeNode(k) {
let node = this.search(k);
return this.splay(node);
}
insertSplayTreeNode(k, v) {
let node = this.insert(k, v);
// 若不是节点类型,则不执行伸展。
if (node instanceof BinarySearchTreeNode) {
return this.splay(node);
}
else {
return node;
}
}
}
// class BTreeNode<T> implements BTNodeIf<T> {
// constructor () {
// // this.order = order
// }
// search(k) {
// }
// }
// class BTree<T> implements BTreeIf<T> {
// order: BTreeIf<T>['order']
// constructor (order) {
// this.order = order
// }
// search(k: N) {
// }
// }
// class RedBackTree<T> extends BinarySearchTree<T> implements RBT<T> {

@@ -777,4 +899,5 @@ // constructor() {

// BTN,
BinaryTree, BinarySearchTree, BinarySearchTreeNode, AVLTree,
BinaryTree, BinarySearchTree, BinarySearchTreeNode, AVLTree, SplayTree,
// BTree,
// RedBackTree,
};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc