问题分析
完全二叉树的存储方式,通过这种存储方式我们可以快速找到一个节点的子节点和父节点,并且节省空间
代码
class CBTInserter {
public:
vector<TreeNode *> CBT = {NULL};
CBTInserter(TreeNode* root) {
levelTraver(root, CBT);
}
void levelTraver(TreeNode *root, vector<TreeNode *> &CBT){
queue<TreeNode *> q;
q.push(root);
while(!q.empty()){
TreeNode *p = q.front();
CBT.push_back(p);
q.pop();
if(p->left) q.push(p->left);
if(p->right) q.push(p->right);
}
return;
}
int insert(int v) {
TreeNode *p = new TreeNode(v);
CBT.push_back(p);
if((CBT.size() - 1) % 2 == 0)
CBT[(CBT.size() - 1) / 2]->left = p;
else
CBT[(CBT.size() - 1) / 2]->right = p;
return CBT[(CBT.size() - 1) / 2]->val;
}
TreeNode* get_root() {
return CBT[1];
}
};