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

Fackbook 下午刚电面的面筋

🔗
胖子Jeffwan 2015-3-12 12:41:08 | 只看该作者
全局:
douya 发表于 2015-3-12 11:32
第三题能详细说下吗?

第三题就是BST转成一个循环的linkedlist,用left right 当prev next 的指针了,上网搜一下,都有的
回复

使用道具 举报

🔗
douch 2015-3-12 14:24:04 | 只看该作者
全局:
fib 的log n的事先没看过现场能想出来那也太牛x了吧
回复

使用道具 举报

🔗
ronaldo17 2015-3-12 22:52:33 | 只看该作者
全局:
第三题no extra space是要求必须用morris traversal?
回复

使用道具 举报

🔗
pandafolk 2015-3-19 08:50:13 | 只看该作者
全局:
  1. //这是二叉树转双向链表的程序,测试通过。
复制代码
回复

使用道具 举报

🔗
pandafolk 2015-3-19 08:51:10 | 只看该作者
全局:
oops,没贴上
  1. public class SolutionConvert {
  2.     public void solve(TreeNode root) {
  3.         if (root == null) {
  4.             return;
  5.         }
  6.         convertToDoubleLinkedList(root);           
  7.     }
  8.    
  9.     public void convertToDoubleLinkedList(TreeNode root) {
  10.         if (root == null) {
  11.             return;
  12.         }
  13.         if (root.left != null) {
  14.             TreeNode left = root.left;
  15.             convertToDoubleLinkedList(left);
  16.             while (left.right != null) {
  17.                 left = left.right;
  18.             }
  19.             left.right = root;
  20.             root.left = left;
  21.         }
  22.         if (root.right != null) {
  23.             TreeNode right = root.right;
  24.             convertToDoubleLinkedList(right);
  25.             while (right.left != null) {
  26.                 right = right.left;
  27.             }
  28.             right.left = root;
  29.             root.right = right;
  30.         }
  31.     }
  32.    
  33.     public void test(String[] args) {
  34.         TreeNode a = new TreeNode("10");
  35.         TreeNode b = new TreeNode("12");
  36.         TreeNode c = new TreeNode("15");
  37.         TreeNode d = new TreeNode("25");
  38.         TreeNode e = new TreeNode("30");
  39.         TreeNode f = new TreeNode("36");
  40.         a.left = b;
  41.         a.right = c;
  42.         b.left = d;
  43.         b.right = e;
  44.         c.left = f;
  45.         solve(a);
  46.         while (a.left != null) {
  47.             a = a.left;
  48.         }
  49.         while (a != null) {
  50.             System.out.print(a.val + " ");
  51.             a = a.right;
  52.         }      
  53.     }
  54. }
复制代码
回复

使用道具 举报

🔗
pandafolk 2015-3-19 08:51:19 | 只看该作者
全局:
oops,没贴上
  1. public class SolutionConvert {
  2.     public void solve(TreeNode root) {
  3.         if (root == null) {
  4.             return;
  5.         }
  6.         convertToDoubleLinkedList(root);           
  7.     }
  8.    
  9.     public void convertToDoubleLinkedList(TreeNode root) {
  10.         if (root == null) {
  11.             return;
  12.         }
  13.         if (root.left != null) {
  14.             TreeNode left = root.left;
  15.             convertToDoubleLinkedList(left);
  16.             while (left.right != null) {
  17.                 left = left.right;
  18.             }
  19.             left.right = root;
  20.             root.left = left;
  21.         }
  22.         if (root.right != null) {
  23.             TreeNode right = root.right;
  24.             convertToDoubleLinkedList(right);
  25.             while (right.left != null) {
  26.                 right = right.left;
  27.             }
  28.             right.left = root;
  29.             root.right = right;
  30.         }
  31.     }
  32.    
  33.     public void test(String[] args) {
  34.         TreeNode a = new TreeNode("10");
  35.         TreeNode b = new TreeNode("12");
  36.         TreeNode c = new TreeNode("15");
  37.         TreeNode d = new TreeNode("25");
  38.         TreeNode e = new TreeNode("30");
  39.         TreeNode f = new TreeNode("36");
  40.         a.left = b;
  41.         a.right = c;
  42.         b.left = d;
  43.         b.right = e;
  44.         c.left = f;
  45.         solve(a);
  46.         while (a.left != null) {
  47.             a = a.left;
  48.         }
  49.         while (a != null) {
  50.             System.out.print(a.val + " ");
  51.             a = a.right;
  52.         }      
  53.     }
  54. }
复制代码
回复

使用道具 举报

🔗
yuruofeifei 2015-3-19 11:53:24 | 只看该作者
全局:

谢谢啊!你从哪找的啊?
回复

使用道具 举报

🔗
pandafolk 2015-3-19 19:24:21 | 只看该作者
全局:
yuruofeifei 发表于 2015-3-18 22:53
谢谢啊!你从哪找的啊?

自己写的。。
回复

使用道具 举报

🔗
yanggao1119 2016-2-19 09:52:37 | 只看该作者
全局:
个人感觉,楼上解法mix了recursive solution,和iterative solution,不够简明。

我的iterative solution with stack,其实就是一个中序遍历:

  public TreeNode BT2CircularDLL(TreeNode root) {
    if (root == null) {
      return root;
    }
    Stack<TreeNode> st = new Stack<>();
    TreeNode curr = root;
    TreeNode head = null;
    TreeNode tail = null;
    TreeNode prev = null;
    while (curr != null || !st.isEmpty()) {
      if (curr != null) {
        st.push(curr);
        curr = curr.left;
      } else {
        TreeNode popped = st.pop();
        if (prev != null) {
          prev.right = popped;
          popped.left = prev;
        } else {
          head = popped;
        }
        prev = popped;
        tail = popped;
        curr = popped.right;
      }
    }
    tail.right = head;
    head.left = tail;
    return head;
  }
回复

使用道具 举报

🔗
linlin1990 2016-2-20 11:21:52 | 只看该作者
全局:
你面的是intern还是fulltime呀?intern和full time的题目可能会一样吗?
回复

使用道具 举报

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

本版积分规则

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