problem:https://leetcode.com/problems/complete-binary-tree-inserter/
使用队列来追踪当前可用的父节点,就可以实现快速插入。
class CBTInserter { public: TreeNode* m_root; queue<TreeNode*> cur; bool bLeft = true; CBTInserter(TreeNode* root) { m_root = root; queue<TreeNode*> q; q.push(root); bool bFind = false; while (!q.empty()) { auto node = q.front(); q.pop(); if (node->left) { q.push(node->left); } else if(!bFind) { bLeft = true; bFind = true; } if (node->right) { q.push(node->right); } else if (!bFind) { bLeft = false; bFind = true; } if (bFind) { cur.push(node); } } } int insert(int v) { auto p = cur.front(); if (bLeft) { p->left = new TreeNode(v); cur.push(p->left); } else { p->right = new TreeNode(v); cur.push(p->right); cur.pop(); } bLeft = !bLeft; return p->val; } TreeNode* get_root() { return m_root; } };