不准访问
积分 107
大米 颗
鳄梨 个
水井 尺
蓝莓 颗
萝卜 根
小米 粒
学分 个
注册时间 2013-3-3
最后登录 1970-1-1
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
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)空间复杂度,然后我只能想到找到两个对调节点以后改值了。看了一下我一直参考的“正确答案”也是这么写的= =
这算不算是偷懒啊。。。面试官会问如果不改值怎么做吗
我代码这么写的:public class Solution {
private TreeNode current = null;
private TreeNode mistaken1 = null;
private TreeNode mistaken2;
public void recoverTree(TreeNode root) {
traverse(root);
int temp = mistaken1.val;
mistaken1.val = mistaken2.val;
mistaken2.val = temp;
}
public void traverse(TreeNode root) {
if (root != null) {
traverse(root.left);
if (current != null && root.val < current.val) {
if (mistaken1 == null) {
mistaken1 = current;
}
if (mistaken1 != null) {
mistaken2 = root;
}
}
current = root;
traverse(root.right);
}
}
} 复制代码
上一篇:
在careercup 网站上面看到一道amazon的面试题 但是题目看不懂 求大神解释一下 下一篇:
帮忙找bug.....多谢,matrix旋转90度那题