• 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;
        }
    };
    

      

  • 相关阅读:
    网页嵌入视频常用方式
    2.4 对字母数字的混合排序
    VC操作Image的三种方法(收集)
    VC 窗口出现白屏闪烁的解决办法
    Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)
    QT 文件拖放事件dropEvent和dragEnterEvent
    百用随身系统 Veket Linux
    C#通过属性名称获取(读取)属性值的方法
    搭建一个完整的Java开发环境
    XSD实例
  • 原文地址:https://www.cnblogs.com/qiaozhoulin/p/14907119.html
Copyright © 2020-2023  润新知