2024-07-17 1110. Delete Nodes And Return Forest Given the root of a binary tree, each node in the tree has a distinct value. After deleting all nodes with a value in to_delete, we are left with a forest (a disjoint union of trees). Return the roots of the trees in the remaining forest. You may return the result in any order. 用 DFS 走 碰到要刪的刪掉 如果沒有 parent 而且沒有要刪 就塞進 result 跟解答比起來 用 loop 找 delete 比直接 vector 操作慢了 dfs return bool 再處理也會比直接 return node 多一層判斷 應該是這兩個在慢吧 /** * 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*> delNodes(TreeNode* root, vector<int>& to_delete) { vector<TreeNode*> results; dfs(root, to_delete, results, false); return results; } private: bool dfs(TreeNode* root, vector<int>& to_delete, vector<TreeNode*>& results, bool isChild) { if (!root) { return false; } bool delete_this = false; for (int d : to_delete) { if (root->val == d) { delete_this = true; break; } } if (!isChild && !delete_this) { results.push_back(root); } if (dfs(root->left, to_delete, results, !delete_this)) { root->left = NULL; } if (dfs(root->right, to_delete, results, !delete_this)) { root->right = NULL; } return delete_this; } }; -- ※ 發信站: 批踢踢實業坊(ptt-website.tw), 來自: 73.173.211.221 (美國) ※ 文章網址: https://ptt-website.tw/Marginalman/M.1721189206.A.C7C
CanIndulgeMe: 技術大神 07/17 12:08
Furina: 我好崇拜你 07/17 12:12