8 questions. Covers Debugging lab: BST bugs.
Questions 1 to 5 of 8
erase_from
Bst
cpp struct Node { int key; std::unique_ptr<Node> left; std::unique_ptr<Node> right; explicit Node(int k) : key(k) {} }; std::unique_ptr<Node> erase_from(std::unique_ptr<Node> node, int key) { if (!node) return nullptr; if (key < node->key) { node->left = erase_from(std::move(node->left), key); return node; } if (key > node->key) { node->right = erase_from(std::move(node->right), key); return node; } if (!node->left) return nullptr; return std::move(node->left); }
if (!node->left) return nullptr;
std::unique_ptr
contains
contains(3)
cpp bool contains(int key) const { const Node* cur = root_.get(); while (cur != nullptr) { if (key > cur->key) cur = cur->left.get(); else if (key < cur->key) cur = cur->right.get(); else return true; } return false; }
cpp #include <iostream> #include <memory> struct Node { int key; std::unique_ptr<Node> left; std::unique_ptr<Node> right; explicit Node(int k) : key(k) {} }; std::unique_ptr<Node> insert(std::unique_ptr<Node> node, int key) { if (!node) return std::make_unique<Node>(key); if (key < node->key) node->left = insert(std::move(node->left), key); else node->right = insert(std::move(node->right), key); return node; } void print(const Node* n) { if (!n) return; print(n->left.get()); std::cout << n->key << ' '; print(n->right.get()); } int main() { std::unique_ptr<Node> root; for (int k : {5, 3, 3, 1}) root = insert(std::move(root), k); print(root.get()); std::cout << "end" << std::endl; }
erase(8)
is_valid()
true
cpp #include <iostream> #include <memory> struct Node { int key; std::unique_ptr<Node> left; std::unique_ptr<Node> right; explicit Node(int k) : key(k) {} }; bool contains(const Node* cur, int key) { while (cur != nullptr) { if (key > cur->key) cur = cur->left.get(); else if (key < cur->key) cur = cur->right.get(); else return true; } return false; } int main() { auto t = std::make_unique<Node>(5); t->left = std::make_unique<Node>(3); t->right = std::make_unique<Node>(8); std::cout << contains(t.get(), 3) << ' ' << contains(t.get(), 8) << ' ' << contains(t.get(), 5) << std::endl; }
5 question(s) left on this page.