--- id: 587d8258367417b2b2512c81 title: Delete a Node with One Child in a Binary Search Tree challengeType: 1 videoUrl: '' localeTitle: Удаление узла с одним ребенком в двоичном дереве поиска --- ## Description undefined ## Instructions
## Tests
```yml tests: - text: Существует структура данных BinarySearchTree . testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() }; return (typeof test == "object")})(), "The BinarySearchTree data structure exists.");' - text: 'Двоичное дерево поиска имеет метод, называемый remove .' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; return (typeof test.remove == "function")})(), "The binary search tree has a method called remove.");' - text: '' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; if (typeof test.remove !== "function") { return false; }; return (test.remove(100) == null); })(), "Trying to remove an element that does not exist returns null.");' - text: '' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; if (typeof test.remove !== "function") { return false; }; test.add(500); test.remove(500); return (test.inorder() == null); })(), "If the root node has no children, deleting it sets the root to null.");' - text: '' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; if (typeof test.remove !== "function") { return false; }; test.add(5); test.add(3); test.add(7); test.add(6); test.add(10); test.add(12); test.remove(3); test.remove(12); test.remove(10); return (test.inorder().join("") == "567"); })(), "The remove method removes leaf nodes from the tree");' - text: '' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; if (typeof test.remove !== "function") { return false; }; test.add(-1); test.add(3); test.add(7); test.add(16); test.remove(16); test.remove(7); test.remove(3); return (test.inorder().join("") == "-1"); })(), "The remove method removes nodes with one child.");' - text: '' testString: 'assert((function() { var test = false; if (typeof BinarySearchTree !== "undefined") { test = new BinarySearchTree() } else { return false; }; if (typeof test.remove !== "function") { return false; }; test.add(15); test.add(27); test.remove(15); return (test.inorder().join("") == "27"); })(), "Removing the root in a tree with two nodes sets the second to be the root.");' ```
## Challenge Seed
```js var displayTree = (tree) => console.log(JSON.stringify(tree, null, 2)); function Node(value) { this.value = value; this.left = null; this.right = null; } function BinarySearchTree() { this.root = null; this.remove = function(value) { if (this.root === null) { return null; } var target; var parent = null; // find the target value and its parent (function findValue(node = this.root) { if (value == node.value) { target = node; } else if (value < node.value && node.left !== null) { parent = node; return findValue(node.left); } else if (value < node.value && node.left === null) { return null; } else if (value > node.value && node.right !== null) { parent = node; return findValue(node.right); } else { return null; } }).bind(this)(); if (target === null) { return null; } // count the children of the target to delete var children = (target.left !== null ? 1 : 0) + (target.right !== null ? 1 : 0); // case 1: target has no children if (children === 0) { if (target == this.root) { this.root = null; } else { if (parent.left == target) { parent.left = null; } else { parent.right = null; } } } // case 2: target has one child, change code below this line }; } ```
### After Test
```js console.info('after the test'); ```
## Solution
```js // solution required ```