楼主: skylinezy0111
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家电面

🔗
randrand1 2017-8-14 22:16:18 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

🔗
bearicc 2017-8-14 22:33:53 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

🔗
bearicc 2017-8-14 22:34:16 | 只看该作者
全局:
bearicc 发表于 2017-8-14 22:33
不太了解Java。如果直接将root 设为null,不清楚其他指向这个object的对象是否也会指向null. 如果设成nul ...

typo, root -> current node
回复

使用道具 举报

🔗
mushbunny 2017-8-15 02:12:22 | 只看该作者
全局:
这是我的java code,用了recursion,参考的思路是leetcode 450 delete node in BST, 我大致跑了几个test case感觉好像是对的
  1. public class Solution {
  2.         public List<TreeNode> remove(TreeNode root, List<TreeNode> toRemove) {
  3.                 List<TreeNode> prevForest = new ArrayList<>();
  4.                 prevForest.add(root);
  5.                 for (TreeNode r : toRemove) {
  6.                         List<TreeNode> currForest = new ArrayList<>();
  7.                         for (TreeNode smRoot : prevForest) {
  8.                                 remove(smRoot, currForest, r);
  9.                         }
  10.                         prevForest = currForest;
  11.                 }
  12.                 return prevForest;
  13.         }
  14.         private TreeNode remove(TreeNode root, List<TreeNode> prev, TreeNode toRemove) {
  15.                 if (root == null) {
  16.                         return null;
  17.                 }
  18.                 if (root == toRemove) {
  19.                         if (root.left != null) {
  20.                                 prev.add(root.left);
  21.                         }
  22.                         if (root.right != null) {
  23.                                 prev.add(root.right);
  24.                         }
  25.                         return null;
  26.                 }
  27.                 root.left = remove(root.left, prev, toRemove);
  28.                 root.right = remove(root.right, prev, toRemove);
  29.                 return root;
  30.         }
  31. }
复制代码
回复

使用道具 举报

🔗
mushbunny 2017-8-15 02:15:27 | 只看该作者
全局:
啊,14楼是错的,请大家忽略,这一版丢掉了原来的root,应该是下面的这个
  1. public class Solution {
  2.         public List<TreeNode> remove(TreeNode root, List<TreeNode> toRemove) {
  3.                 List<TreeNode> prevForest = new ArrayList<>();
  4.                 prevForest.add(root);
  5.                 for (TreeNode r : toRemove) {
  6.                         List<TreeNode> currForest = new ArrayList<>();
  7.                         for (TreeNode smRoot : prevForest) {
  8.                                 remove(smRoot, currForest, r);
  9.                                 if (smRoot != r) {
  10.                                         currForest.add(smRoot);
  11.                                 }
  12.                         }
  13.                         prevForest = currForest;
  14.                 }
  15.                 return prevForest;
  16.         }
  17.         private TreeNode remove(TreeNode root, List<TreeNode> prev, TreeNode toRemove) {
  18.                 if (root == null) {
  19.                         return null;
  20.                 }
  21.                 if (root == toRemove) {
  22.                         if (root.left != null) {
  23.                                 prev.add(root.left);
  24.                         }
  25.                         if (root.right != null) {
  26.                                 prev.add(root.right);
  27.                         }
  28.                         return null;
  29.                 }
  30.                 root.left = remove(root.left, prev, toRemove);
  31.                 root.right = remove(root.right, prev, toRemove);
  32.                 return root;
  33.         }
  34. }
复制代码
应该是下面这个
回复

使用道具 举报

🔗
randrand1 2017-8-15 03:05:27 | 只看该作者
全局:
mushbunny 发表于 2017-8-15 02:15
啊,14楼是错的,请大家忽略,这一版丢掉了原来的root,应该是下面的这个
应该是下面这个

这个复杂度看起来要删掉几个node,就需要遍历几遍剩下的nodes?
回复

使用道具 举报

🔗
mushbunny 2017-8-15 08:08:05 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

🔗
zzgzzm 2017-8-15 10:14:01 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

🔗
zzgzzm 2017-8-15 10:23:38 | 只看该作者
全局:
我是若root本身被删除的话也留在临时结果“roots”中,最后再统一去除空nodes.
  1. vector<TreeNode*> roots;

  2. // helper function
  3. void preOrderSplit(TreeNode* cur, unordered_set<TreeNode*>& toRemove) {
  4.     if (!cur || toRemove.empty()) return;
  5.     if (toRemove.count(cur)) {      
  6.         if (cur->left) roots.push_back(cur->left);
  7.         if (cur->right) roots.push_back(cur->right);
  8.         toRemove.erase(cur); delete cur;
  9.         return;
  10.     }
  11.     preOrderSplit(cur->left, toRemove);
  12.     preOrderSplit(cur->right, toRemove);
  13. }

  14. vector<TreeNode*> split(TreeNode* r, unordered_set<TreeNode*>& toRemove) {
  15.     roots = {r};
  16.     for (int i = 0; i < roots.size(); ++i)
  17.       preOrderSplit(roots[i], toRemove);
  18.    
  19.     vector<TreeNode*> res;
  20.     for (auto r : roots) if (r) res.push_back(r);
  21.     return res;
  22. }
复制代码
回复

使用道具 举报

🔗
wxdsdtc 2017-8-16 13:25:41 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表