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

Amazon OA2 due on 12/15

🔗
leonidas1573 2015-12-13 09:18:51 | 只看该作者
全局:
dengke 发表于 2015-12-13 09:15
http://algorithms.tutorialhorizon.com/given-two-binary-trees-check-if-one-binary-tree-is-a-subtree-o ...

我OA没遇到subtree所以不知道具体要求.
不过tree serialization的时候, 如果tree含重复节点, 是不能用inorder+preorder/postorder做线性化的.如果subtree这道题说可以有duplicate node.那么这两种O(N)做法就不ok,只有用naive的方法了.
当然如果subtree说了不能有duplicate, 就没问题
回复

使用道具 举报

🔗
 楼主| wwj722 2015-12-13 09:21:38 | 只看该作者
全局:
leonidas1573 发表于 2015-12-13 09:18
我OA没遇到subtree所以不知道具体要求.
不过tree serialization的时候, 如果tree含重复节点, 是不能用in ...

recursion也是O(N)的算法啊,你写成iterator本质上没区别的。
回复

使用道具 举报

🔗
leonidas1573 2015-12-13 09:31:19 | 只看该作者
全局:
recursion是O(N)么.我看到的算法是

  1. class TreeNode {
  2.         int val;
  3.         TreeNode left;
  4.         TreeNode right;
  5.         TreeNode(int x) { val = x; }
  6. }

  7. public class Subtree {
  8.         public boolean isSubTree(TreeNode T1, TreeNode T2) {
  9.                 if (T2 == null)        return true;
  10.                 if (T1 == null)        return false;
  11.                 return (isSameTree(T1,T2) || isSubTree(T1.left, T2) || isSubTree(T1.right, T2));
  12.         }
  13.         public boolean isSameTree(TreeNode T1, TreeNode T2) {
  14.                 if (T1 == null && T2 == null)        return true;
  15.                 if (T1 == null || T2 == null)        return false;
  16.                 if (T1.val != T2.val)        return false;
  17.                 return (isSameTree(T1.left, T2.left) && isSameTree(T1.right, T2.right));
  18.         }
  19. }
复制代码
回复

使用道具 举报

🔗
 楼主| wwj722 2015-12-13 09:54:46 | 只看该作者
全局:
leonidas1573 发表于 2015-12-13 09:31
recursion是O(N)么.我看到的算法是

是O(N)啊。因为每个node都会遍历的。
回复

使用道具 举报

🔗
ilovemango 2015-12-14 14:51:48 | 只看该作者
全局:
谢谢楼主分享,很详细呢,祝楼主马上来video, offer!!!
回复

使用道具 举报

🔗
水逼一枚 2015-12-14 15:59:52 | 只看该作者
全局:
leonidas1573 发表于 2015-12-13 09:31
recursion是O(N)么.我看到的算法是

recursion复杂度是O(m*n), m是T1的nodes数,n是T2的nodes数,这样回答比较准确还是不要说O(N)的号。
回复

使用道具 举报

🔗
水逼一枚 2015-12-14 16:02:26 | 只看该作者
全局:
leonidas1573 发表于 2015-12-13 09:18
我OA没遇到subtree所以不知道具体要求.
不过tree serialization的时候, 如果tree含重复节点, 是不能用in ...

这题的最优解是迭代遍历存成字符串后,用KMP实现strStr(), 复杂度做到O(n)
回复

使用道具 举报

🔗
水逼一枚 2015-12-14 16:09:34 | 只看该作者
全局:
leonidas1573 发表于 2015-12-13 09:18
我OA没遇到subtree所以不知道具体要求.
不过tree serialization的时候, 如果tree含重复节点, 是不能用in ...

还有就是你说的这个duplicate的问题只是在constuctr回binary tree是不行的,但是你用inorder + preorder/postorder遍历后再检测substring是没有问题的。
回复

使用道具 举报

🔗
leonidas1573 2015-12-15 00:58:43 | 只看该作者
全局:
水逼一枚 发表于 2015-12-14 16:09
还有就是你说的这个duplicate的问题只是在constuctr回binary tree是不行的,但是你用inorder + preorder/ ...
  1.     b           b
  2.    /           /
  3.   a           a
  4. / \         /
  5. a   a       a
  6.            /
  7.                   a
复制代码
左树右树三种遍历方式全相等.根据13楼code答案是false.

补充内容 (2015-12-15 00:59):
第七行的a向左移动6个字符.图片被弄乱了.
回复

使用道具 举报

🔗
水逼一枚 2015-12-15 01:09:14 | 只看该作者
全局:
leonidas1573 发表于 2015-12-15 00:58
左树右树三种遍历方式全相等.根据13楼code答案是false.

补充内容 (2015-12-15 00:59):

那就这样,只用preorder先序遍历,对null node添加成'#'拼到字符串里,然后再检测子串,你看看行不行,stack允许null的push.
回复

使用道具 举报

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

本版积分规则

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