/** * @title 二叉排序树 */class BinaryTreeNode { constructor(key, value) { this.key = key; this.value = value; this.left = null; this.right = null; this.parent = null; }}class BinarySearchTree { constructor() { this.root = null; } static createNode(key, value) { return new BinaryTreeNode(key, value); } insert(node) { // 如果没有根节点,则直接插入到根节点 if (!this.root) { this.root = node; return; } let parent = this.root; while (true) { if (node.key < parent.key) { // 该节点比父节点小,则该节点在左子树 if (parent.left) { parent = parent.left; continue; } else { parent.left = node; break; } } else { if (parent.right) { parent = parent.right; continue; } else { parent.right = node; break; } } } node.parent = parent; } search(key) { let currentNode = this.root; while (currentNode && key !== currentNode.key) { if (key < currentNode.key) { currentNode = currentNode.left; } else { currentNode = currentNode.right; } } return currentNode } traverse(){ return [...this._traverse(this.root)] } *_traverse(node){ if(!node){ return; } yield* this._traverse(node.left); yield node; yield* this._traverse(node.right) }}const tree= new BinarySearchTree();tree.insert(BinarySearchTree.createNode(10, 10))tree.insert(BinarySearchTree.createNode(5, 5))tree.insert(BinarySearchTree.createNode(16, 16))tree.insert(BinarySearchTree.createNode(7, 7))tree.insert(BinarySearchTree.createNode(20, 20))list = [...tree.traverse(tree.root)];