交了 20 多发,卡了一个小时,在此警示后人:
stack<int> s; int p;
int new_node() {
if(!s.empty()) {
int tmp=s.top(); s.pop();
tree[tmp]={0,0,0};
return tmp;
}
return ++p;
}
void del_node(int &k) {
s.push(k); k=0;
}
因为 del_node 函数只删除了根节点,而没有删除整棵子树;使用下面写法即可通过本题:
#define ls(k) tree[k].lson
#define rs(k) tree[k].rson
stack<int> s; int p;
int new_node() {
if(!s.empty()) {
int tmp=s.top(); s.pop(); tree[tmp]={0,0,0}; return tmp;
}
return ++p;
}
void del_node(int &k) {
if(ls(k)) del_node(ls(k));
if(rs(k)) del_node(rs(k));
s.push(k); k=0;
}