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

狗家淀面

全局:

2019(1-3月) 码农类General 硕士 全职@google - 内推 - 技术电面  | | Pass | 应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
面试官一上来就直接贴了题目,还包括一张图,说为了节约时间就直接开始做题吧。
1.给定一棵二叉树,在这棵树中有一些节点需要被删除,现在有一个可供调用的函数shouldBeErased(Node *t)可以用来判断每个节点是否应被移除(返回一个布尔值true或者false)。在删除了那些需要被移除的节点之后,原来的二叉树就会被打散成一棵棵子树,或者说是一个森林,要求返回最终的这个森林(用一个数组来表示,数组中每个元素是对应子树的树根)。
我就说可以用DFS,从树根开始搜索,对每个节点判断一下是否应被删除,如果要删除的话就移除掉它并递归调用此函数来删除左右子树里要删除的节点并合并左右子树得到的森林,如果不删除的话也还是递归地对左右子树进行删除操作,但合并的时候稍微注意一下如果左(或右)子树的树根没有被删除,那么它应该连着当前的树根,也就是说左(右)子树得到
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
了一次的元素肯定在数组右半部份(假设数组下标从0开始),如果idx为奇数那么目标就在左半部分,继续这样二叉查找。

感觉是运气好碰到一个比较nice的面试官,愿意跟我聊,在写代码过程中看到了一些问题愿意给我指出来(而不是暗自给我扣分之类的),当然因为题目不难,所以基本功以及整个过程的沟通比较重要,需要比较顺畅地完成这个过程,而不要一个人闷头苦想10分钟或者一声不吭地写代码造成尴尬的冷场。过了几天HR通知接下来去onsite。

评分

参与人数 8大米 +26 收起 理由
savesakid + 2 很有用的信息!
scout01 + 2 很有用的信息!
feithyxz + 3 感谢分享哇
irisasd + 3 给你点个赞!
kzhu + 3 给你点个赞!

查看全部评分


上一篇:黑车昂赛
下一篇:hard难度: cohesity DS 电面

本帖被以下淘专辑推荐:

推荐
hlckl123456 2018-11-16 01:59:31 | 只看该作者
全局:

定义了一个全局变量res
一个boolean 变量来判断是root,还是非root
是root的话我们就要加入array,不是root的话 就正常遍历
  1. def get_forest(self, node):
  2.         if node is None:
  3.                 return []
  4.         res = []
  5.         self.helper(node, res, True)
  6.         return res

  7. def helper(self, node, res, is_root):
  8.         if node is None:
  9.                 return None

  10.         if shouldBeErased(root):
  11.                 if node.left:
  12.                         self.helper(node.left, res, True)
  13.                 if node.right:
  14.                         self.helper(node.right, res, True)

  15.         if not shouldBeErased(root):
  16.                 if is_root:
  17.                         res.append(node)
  18.                 if node.left:
  19.                         node.left = self.helper(node.left, res, False)
  20.                 if node.right:
  21.                         node.right = self.helper(node.right, res, False)
复制代码
回复

使用道具 举报

推荐
YZeng 2018-11-15 11:55:38 | 只看该作者
全局:

  1. import java.util.*;

  2. public class removeNodes {

  3.     static class Node {
  4.         int val;
  5.         Node left;
  6.         Node right;
  7.         boolean toRemove;
  8.         public Node(int val) {
  9.             this.val = val;
  10.         }
  11.     }

  12.     public static void main(String[] args) {


  13.         Node n1 = new Node(1);
  14.         Node n2 = new Node(2);
  15.         Node n3 = new Node(3);
  16.         Node n4 = new Node(4);
  17.         Node n5 = new Node(5);
  18.         Node n6 = new Node(6);
  19.         Node n7 = new Node(7);

  20.         n1.left = n2;
  21.         n1.right = n3;
  22.         n2.left = n4;
  23.         n2.right = n5;
  24.         n3.left = n6;
  25.         n3.right = n7;
  26.         n1.toRemove = true;
  27.         n2.toRemove = true;
  28.         n6.toRemove = true;

  29.         List<Node> list = removeNodes(n1);
  30.         for (Node n : list) {
  31.             print(n);
  32.         }
  33.     }

  34.     private static void print(Node root) {
  35.         System.out.println("===");
  36.         Deque<Node> q = new LinkedList<>();
  37.         q.offer(root);
  38.         while (!q.isEmpty()) {
  39.             int size = q.size();
  40.             while (size-- > 0) {
  41.                 Node cur = q.poll();
  42.                 if (cur == null) {
  43.                     System.out.print("#");
  44.                 } else {
  45.                     System.out.print(cur.val);
  46.                     q.offer(cur.left);
  47.                     q.offer(cur.right);
  48.                 }
  49.             }
  50.             System.out.println();
  51.         }
  52.         System.out.println("===");
  53.     }

  54.     private static List<Node> removeNodes(Node root) {
  55.         List<Node> res = new ArrayList<>();
  56.         if (root == null) {
  57.             return res;
  58.         }

  59.         List<Node> left = removeNodes(root.left);
  60.         List<Node> right = removeNodes(root.right);

  61.         if (!root.toRemove) {
  62.             res.add(root);
  63.         }

  64.         if (root.left != null && root.left.toRemove) {
  65.             root.left = null;
  66.         }
  67.         if (root.right != null && root.right.toRemove) {
  68.             root.right = null;
  69.         }

  70.         res.addAll(left);
  71.         res.addAll(right);
  72.         return res;
  73.     }

  74.     private static void helper(List<Node> res, Node root) {
  75.         if (root == null) {
  76.             return;
  77.         }

  78.         if (root.toRemove) {
  79.             helper(res, root.left);
  80.             helper(res, root.right);
  81.         } else {

  82.         }
  83.     }
  84. }
复制代码

补充内容 (2018-11-15 11:56):
请忽略helper函数
回复

使用道具 举报

🔗
 楼主| qianlizimu 2018-8-22 06:20:53 | 只看该作者
全局:
打错了,binary search当然复杂度是O(logn)……
回复

使用道具 举报

🔗
pandami 2018-8-22 08:35:23 | 只看该作者
全局:
楼主基本功不错。第一题bfs可破否?如果子树需要删就存入全局变量 父node里设为null
回复

使用道具 举报

🔗
 楼主| qianlizimu 2018-8-22 09:23:11 | 只看该作者
全局:
pandami 发表于 2018-8-22 08:35
楼主基本功不错。第一题bfs可破否?如果子树需要删就存入全局变量 父node里设为null

个人觉得bfs或者dfs影响不大,就是代码里面有一些细节上的处理要注意一下,比如父亲为空,或者父亲不为而子树只有一个为空/都不为空等等各种情况都考虑到就差不多
回复

使用道具 举报

🔗
pandami 2018-8-22 09:35:16 | 只看该作者
全局:
qianlizimu 发表于 2018-8-22 09:23
个人觉得bfs或者dfs影响不大,就是代码里面有一些细节上的处理要注意一下,比如父亲为空,或者父亲不为而 ...

是的 bfs不用递归不知道会不会好写一点
回复

使用道具 举报

🔗
weilianSD 2018-8-23 02:04:34 | 只看该作者
全局:
pandami 发表于 2018-8-22 09:35
是的 bfs不用递归不知道会不会好写一点

觉得递归好写,就像你说的把要删除的节点存到全局变量里面,如果要删除递归函数返回None,否则返回节点本身
回复

使用道具 举报

🔗
jamesbond007 2018-8-23 09:46:04 | 只看该作者
全局:
void dfs(TreeNode node, Boolean isParentDeleted, List<TreeNode> answer)
{
...
}
回复

使用道具 举报

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

使用道具 举报

🔗
ellen0829 2018-9-18 08:33:25 | 只看该作者
全局:
很详细!谢谢楼主
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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