王道5-3-11删除以x为根的子树

题目大意

删除以x为根节点的所有子树,注意可能有多个为x值

思路

  1. 先递归删除所有节点
  2. 可能有多个值是x,所以用层序找出他们的父节点,然后删除x,同时设置父节点的子节点为空

代码实现

/*
 * 删除每个以x为值的子树(可能有多个,父节点智能用层序找到)
 * 1.递归删除节点
 * 2.层序找到后调用1
 */
void del(TreeNode* root){
    
    
    if (root== nullptr){
    
    
        return;
    }
    del(root->left);
    del(root->right);
    free(root);
    //释放节点
}
void searchDel(TreeNode *root,int x){
    
    
    if(root== nullptr){
    
    
        return;
    }
    if (root->val==x){
    
    
//        根节点就是,全删
        del(root);
        return;
    }
//    层序遍历找父亲
    queue<TreeNode*> queue1;
    queue1.push(root);
    while (!queue1.empty()){
    
    
        TreeNode* cur=queue1.front();
//        如果是就删除
        queue1.pop();
        if (cur->left){
    
    
            if (cur->left->val==x){
    
    
                del(cur->left);
                cur->left= nullptr;
            } else{
    
    
//                加入
                queue1.push(cur->left);
            }
        }
        
        if (cur->right){
    
    
            if (cur->right->val==x){
    
    
                del(cur->right);
                cur->right= nullptr;
            } else{
    
    
//                加入
                queue1.push(cur->right);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42186444/article/details/107229835