构建二叉树后如何遍历删除new出来的节点呢?这件小事情常常被忽略,网上也没什么参考资料,实现了如下实验。该过程中条件设置出现小纰漏,构建二叉树的索引算错,反应自己水平还是很低。
#include <cstdio>
#include <queue>
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int val):val(val),left(NULL),right(NULL){};
TreeNode(int val,TreeNode* left,TreeNode* right):val(val),left(left),right(right){};
};
void dele(TreeNode* &root){
if(!root)return;
dele(root->left);
dele(root->right);
printf("deleting %d\n",root->val);
delete root;
}
void printTree(TreeNode* root){
std::queue<TreeNode*> q;
if(root)q.push(root);
while(!q.empty()){
TreeNode* x=q.front();
printf("%d ",x->val);
q.pop();
if(x->left)q.push(x->left);
if(x->right)q.push(x->right);
}
}
int main(){
TreeNode* tns[7];
for(int i=0;i<7;i++){
tns[i]=new TreeNode(i);
}
for(int i=0;i<3;i++){
tns[i]->left=tns[2*i+1];
tns[i]->right=tns[2*i+2];
}
printTree(tns[0]);
dele(tns[0]);
return 0;
}
本文创建于2022.7.7/18.49,修改于2022.7.7/18.49