12
返回列表 发新帖
楼主: TingDallas
跳转到指定楼层
上一主题 下一主题
收起左侧

亚麻社招onsite

🔗
 楼主| TingDallas 2018-2-16 03:59:34 | 只看该作者
全局:
仅供参考:
void recursionMerge(TreeNode root1, TreeNode root2)
//根为root1的树接收节点, 根为root2的树被遍历,挨个插入root1的那棵树
        if root2 is null, return
        TreeNode tempLeft = root2.left; TreeNode tempRight = root2.right;
        root2.left = null; root2.right = null;
        insert(root1, root2);        // 调用另外一个函数,insert a single TreeNode to BST
        recursionMerge(root1, tempLeft);
        recursionMerge(root1, tempRight);
还可以多写一个wrapper函数来快速解决,root1为空或者root2为空的情况
递归函数产生的额外空间无所谓,当然和面试官确认下是最稳的

评分

参与人数 1大米 +3 收起 理由
huazhernea + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
LUOLUOLNSH 2018-2-18 01:54:25 | 只看该作者
全局:
字母比较低调 发表于 2018-2-15 14:40
否则被拆散的节点会继续连在在以前的左右子节点上

xiexie : )
回复

使用道具 举报

🔗
zzgzzm 2018-2-18 05:48:57 | 只看该作者
全局:
Thanks to LZ. I used bottom-up recursion to save temporary pointers.
  1. void insertBST(Node* r, Node* x) {
  2.     if (!r || !x) return;
  3.     if (x->val < r->val)
  4.         if (r->left) r = r->left;
  5.         else insertBST(r->left, x);
  6.     else if (r->right) r = r->right;
  7.     else insertBST(r->right, x);
  8. }

  9. void mergeBST(Node* r1, Node* r2) {
  10.     if (!r2) return;
  11.     mergeBST(r1, r2->left), mergeBST(r1, r2->right);
  12.     r2->left = r2->right = nullptr;
  13.     insertBST(r1, r2);
  14. }
复制代码
回复

使用道具 举报

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

本版积分规则

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