• 1110. 删点成林


    给出二叉树的根节点 root,树上每个节点都有一个不同的值。

    如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。

    返回森林中的每棵树。你可以按任意顺序组织答案。

    示例:

    输入:root = [1,2,3,4,5,6,7], to_delete = [3,5]
    输出:[[1,2,null,4],[6],[7]]
     

    提示:

    树中的节点数最大为 1000。
    每个节点都有一个介于 1 到 1000 之间的值,且各不相同。
    to_delete.length <= 1000
    to_delete 包含一些从 1 到 1000、各不相同的值。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        vector<TreeNode*> res;
        set<int> delSet;
        TreeNode* delNodesProcess(TreeNode* root)
        {
            if(root == nullptr)
            {
                return nullptr;
            }
    
            root->left = delNodesProcess(root->left);
            root->right = delNodesProcess(root->right);
            if(delSet.find(root->val) != delSet.end())
            {
                if(root->left !=nullptr)
                {
                    res.push_back(root->left);
                }
                if(root->right !=nullptr)
                {
                    res.push_back(root->right);
                }
                root = nullptr;
            }
            return root;
        }
        vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
            if(root == nullptr)
            {
                return res;
            }
            int len = to_delete.size();
            for(int i = 0; i < len; i++)
            {
                delSet.insert(to_delete[i]);
            }
            if(root == nullptr)
            {
                return res;
            }
    
            root->left = delNodesProcess(root->left);
            root->right = delNodesProcess(root->right);
            if(delSet.find(root->val) != delSet.end())
            {
                if(root->left !=nullptr)
                {
                    res.push_back(root->left);
                }
                if(root->right !=nullptr)
                {
                    res.push_back(root->right);
                }
            }
            else
            {
                res.push_back(root);
            }
            return res;
        }
    };
    

      

  • 相关阅读:
    Linux软件安装中RPM与YUM 区别和联系(转载)
    linux文件系统
    (转载) linux基础知识
    linux学习:硬盘挂载
    IDEA版github教程(转载)
    idea配置gitee(转载)
    事与人的关系
    maven打包失败与问题反思
    计算机开机
    maven到底干了啥
  • 原文地址:https://www.cnblogs.com/qiaozhoulin/p/14907119.html
Copyright © 2020-2023  润新知