pisces-data-structure
Version:
104 lines (86 loc) • 3.2 kB
text/typescript
/**
* 树结构相关类型/接口
*/
// 红黑树节点颜色枚举
enum ERedBlackTreeNodeColor {
RED,
BLACK
};
// 树节点接口
interface ITreeNode<T> {
value: T; // 树节点中保存的值
}
// 二叉搜索树节点接口
interface IBinarySearchTreeNode<T> extends ITreeNode<T> {
left: IBinarySearchTreeNode<T> | null; // 左子节点
right: IBinarySearchTreeNode<T> | null; // 右子节点
/**
* 增强二叉搜索树拓展性所需属性
*/
parent: IBinarySearchTreeNode<T> | null; // 父节点
get isLeftChild(): boolean; // 当前节点是否属于父节点的左子节点
get isRightChild(): boolean; // 当前节点是否属于父节点的右子节点
}
// AVL树节点接口
interface IAVLTreeNode<T> extends IBinarySearchTreeNode<T> {
/**
* 树平衡相关方法
*/
getBalanceFactor(): number; // 获取平衡因子
get isBalanced(): boolean; // 当前AVL树节点是否处于平衡状态
get higherChildNode(): IAVLTreeNode<T> | null; // 获取具有更大高度的子节点
rotateRight(): void; // 以当前AVL树节点为根执行右旋转
rotateLeft(): void; // 以当前AVL树节点为根执行左旋转
}
// 红黑树节点接口
interface IRedBlackTreeNode<T> extends IBinarySearchTreeNode<T> {
color: ERedBlackTreeNodeColor; // 树节点颜色(红/黑)
}
// 树接口
interface ITree<T> {
}
// 二叉搜索树接口
interface IBinarySearchTree<T> extends ITree<T> {
/**
* 插入操作
*/
insert(value: T): void; // 向二叉搜索树中插入一个新的数据
/**
* 查找操作
*/
search(value: T): boolean; // 在二叉搜索树中查找一个数据,如果该数据以节点的形式存在于二叉搜索树中,则返回 true ;否则返回 false
/**
* 查找最值操作
*/
findMax(): T | null; // 查找二叉搜索树中的最大值
findMin(): T | null; // 查找二叉搜索树中的最小值
/**
* 删除操作
*/
remove(value: T): boolean; // 从二叉搜索树中移除某个数据;如果删除成功,则返回 true ;如果删除失败,则返回 false
/**
* 遍历操作
*/
preOrderTraverse(callbackFn?: (treeNode: IBinarySearchTreeNode<T>) => void): void; // 先序遍历
inOrderTraverse(callbackFn?: (treeNode: IBinarySearchTreeNode<T>) => void): void; // 中序遍历
postOrderTraverse(callbackFn?: (treeNode: IBinarySearchTreeNode<T>) => void): void; // 后序遍历
levelOrderTraverse(callbackFn?: (treeNode: IBinarySearchTreeNode<T>) => void): void; // 层序遍历
}
// AVL树
interface IAVLTree<T> extends IBinarySearchTree<T> {
}
// 红黑树
interface IRedBlackTree<T> extends IBinarySearchTree<T> {
minimum(targetTreeNode: IRedBlackTreeNode<T> | null): IRedBlackTreeNode<T> | null; // 查找某个树节点在红黑树中的最小值
}
export {
ERedBlackTreeNodeColor,
ITreeNode,
IBinarySearchTreeNode,
IAVLTreeNode,
IRedBlackTreeNode,
ITree,
IBinarySearchTree,
IAVLTree,
IRedBlackTree,
};