--- tags: leetcode --- # [919. Complete Binary Tree Inserter](https://leetcode.com/problems/complete-binary-tree-inserter/) --- # My Solution ## The Key Idea for Solving This Coding Question ## C++ Code ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class CBTInserter { public: CBTInserter(TreeNode *root) : root(root) { bfs(root); } int insert(int val) { TreeNode *newNode = new TreeNode(val); TreeNode *node = nodeQ.front(); if (node->left == nullptr) { node->left = newNode; nodeQ.push(newNode); return node->val; } node->right = newNode; nodeQ.pop(); nodeQ.push(newNode); return node->val; } TreeNode *get_root() { return root; } private: queue<TreeNode *> nodeQ; TreeNode *root; void bfs(TreeNode *root) { queue<TreeNode *> q; q.push(root); while (!q.empty()) { TreeNode *curr = q.front(); q.pop(); if (curr->right == nullptr) { nodeQ.push(curr); } if (curr->left != nullptr) { q.push(curr->left); } if (curr->right != nullptr) { q.push(curr->right); } } } }; /** * Your CBTInserter object will be instantiated and called as such: * CBTInserter* obj = new CBTInserter(root); * int param_1 = obj->insert(val); * TreeNode* param_2 = obj->get_root(); */ ``` ## Time Complexity * `CBTInserter` $O(n)$ $n$ is the number of nodes in the complete binary tree referred by `root`. * `insert` $O(1)$ * `get_root` $O(1)$ ## Space Complexity * `CBTInserter` $O(n)$ * `insert` $O(1)$ * `get_root` $O(1)$ # Miscellaneous <!-- # Test Cases ``` ["CBTInserter","insert","insert","get_root"] [[[1,2]],[3],[4],[]] ``` ``` ["CBTInserter","insert","get_root"] [[[1]],[2],[]] ``` ``` ["CBTInserter","insert","insert","get_root"] [[[1,2,3,4,5,6]],[7],[8],[]] ``` ``` ["CBTInserter","insert","insert","insert","get_root"] [[[1]],[2],[3],[4],[]] ``` ``` ["CBTInserter","insert","insert","insert","insert","insert","get_root"] [[[1]],[2],[3],[4],[5],[6],[]] ``` -->