📣 4th of July限时特惠: VIP通行证立减$68
查看: 1479| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] Recover BST...直接对调一下节点的值真的可以吗

全局:

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

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

x
Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.
Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

感觉一般情况下,能不直接给二叉树/链表改值的,都不会直接改值
这道题要求用O(1)空间复杂度,然后我只能想到找到两个对调节点以后改值了。看了一下我一直参考的“正确答案”也是这么写的= =
这算不算是偷懒啊。。。面试官会问如果不改值怎么做吗

我代码这么写的:
  1. public class Solution {
  2.    
  3.     private TreeNode current = null;
  4.     private TreeNode mistaken1 = null;
  5.     private TreeNode mistaken2;
  6.    
  7.     public void recoverTree(TreeNode root) {
  8.         traverse(root);
  9.         int temp = mistaken1.val;
  10.         mistaken1.val = mistaken2.val;
  11.         mistaken2.val = temp;
  12.     }
  13.    
  14.     public void traverse(TreeNode root) {
  15.         if (root != null) {
  16.             traverse(root.left);
  17.             if (current != null && root.val < current.val) {
  18.                 if (mistaken1 == null) {
  19.                     mistaken1 = current;
  20.                 }
  21.                 if (mistaken1 != null) {
  22.                     mistaken2 = root;
  23.                 }
  24.             }
  25.             current = root;
  26.             traverse(root.right);
  27.         }
  28.     }
  29. }
复制代码

上一篇:在careercup 网站上面看到一道amazon的面试题 但是题目看不懂 求大神解释一下
下一篇:帮忙找bug.....多谢,matrix旋转90度那题
🔗
ilovetennis 2014-8-22 17:51:20 | 只看该作者
全局:
我觉得除了直接改值没别的办法了吧。。如果这不允许,还原二叉树就只能修改结构了。

另外,我看网上很多答案都用了递归。递归调用是会用到递归栈的,空间复杂度是O(n), 我觉得不合题目要求。
回复

使用道具 举报

🔗
wzf1943 2014-8-25 00:57:16 | 只看该作者
回复

使用道具 举报

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

本版积分规则

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