回到首页

遍历删除二叉树中的节点

构建二叉树后如何遍历删除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