由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道msft的题
相关主题
leetcode里面的Recover Binary Search Tree怎么用O(1)space大概说一下昨天的Google Phone Interview
recover binary search tree 常数空间树 inorder下个节点最好办法是啥
问个G的电面题问一道二叉树遍历的问题? 谢谢!
Leetcode Recover Binary Search Tree一问BST 找重复节点数
问一道leetcode题:recover BSTBST查找next lowest 可以达到 O(lg N)?
怎么理解递归解决的“swap every two elements in a linked list”?攒人品,amazon一面经历
请问排过序的list组建一个bst 复杂度是多少?讨论几道google题(附个人答案)
fb家面试题讨论Find the node with given value in binary tree in in-order
相关话题的讨论汇总
话题: prev话题: max话题: swap话题: treenode
进入JobHunting版参与讨论
1 (共1页)
a****o
发帖数: 45
1
从geeksforgeeks看得
Two elements of BST are swapped by mistake. You have to restore the tree
without changing its structure.
v***n
发帖数: 5085
2
in order travel so to build a sorted array and find the two elements first?
v***d
发帖数: 51
3
有个想法:
按照inorder遍历这个bst,存到一个数组。在数组中找到这两个数(e.g.二分查找直到
发现局部最大和最小),然后swap它们在bst上的位置。
v***d
发帖数: 51
4
和你的方法重了,呵呵。

【在 v***n 的大作中提到】
: in order travel so to build a sorted array and find the two elements first?
a*******y
发帖数: 1040
5
inorder is not necessary, just use recursion to make sure min<=p->data < max
, update min and max depending on left or right, save the two nodes and swap
the data.
a****o
发帖数: 45
6
For example,
2
/ \
3 4
/
1
Actually, we need to swap 2 and 3. However, 2 is valid because initial min=
INT_min and max= INT_MAX. How to deal this case?

max
swap

【在 a*******y 的大作中提到】
: inorder is not necessary, just use recursion to make sure min<=p->data < max
: , update min and max depending on left or right, save the two nodes and swap
: the data.

p*****2
发帖数: 21240
7

=
左树错误,右树正确,它自己一定是错误的。

【在 a****o 的大作中提到】
: For example,
: 2
: / \
: 3 4
: /
: 1
: Actually, we need to swap 2 and 3. However, 2 is valid because initial min=
: INT_min and max= INT_MAX. How to deal this case?
:
: max

p*****2
发帖数: 21240
8

max
swap
我基本也是这个思路。

【在 a*******y 的大作中提到】
: inorder is not necessary, just use recursion to make sure min<=p->data < max
: , update min and max depending on left or right, save the two nodes and swap
: the data.

p*****2
发帖数: 21240
9
写了一下,不好写。
i**********e
发帖数: 1145
10
这题最坏情况要O(n)吧,必须检查每一个节点。
基本思路就是 inorder traversal 和保存前一个节点,但不用额外的空间。
TreeNode *first, *second, *prev;
void recoverHelper(TreeNode *p) {
if (!p) return;
recoverHelper(p->left);
if (prev && prev->val > p->val) {
if (!first)
first = prev;
second = p;
}
prev = p;
recoverHelper(p->right);
}
void recover(TreeNode *root) {
first = second = prev = NULL;
recoverHelper(root);
swap(first->val, second->val);
}
相关主题
怎么理解递归解决的“swap every two elements in a linked list”?大概说一下昨天的Google Phone Interview
请问排过序的list组建一个bst 复杂度是多少?树 inorder下个节点最好办法是啥
fb家面试题讨论问一道二叉树遍历的问题? 谢谢!
进入JobHunting版参与讨论
p*****2
发帖数: 21240
11

赞。确实是这个规律。

【在 i**********e 的大作中提到】
: 这题最坏情况要O(n)吧,必须检查每一个节点。
: 基本思路就是 inorder traversal 和保存前一个节点,但不用额外的空间。
: TreeNode *first, *second, *prev;
: void recoverHelper(TreeNode *p) {
: if (!p) return;
: recoverHelper(p->left);
: if (prev && prev->val > p->val) {
: if (!first)
: first = prev;
: second = p;

i**********e
发帖数: 1145
12
刚加了这道题 “Recover Binary Search Tree".
递归的解法可行吗?我感觉好像不太行得通。
p*****2
发帖数: 21240
13

你这个不就是递归吗?
我当时没想到用global variable, 搞了半天没搞对。用global variable 看起来就好
多了。

【在 i**********e 的大作中提到】
: 刚加了这道题 “Recover Binary Search Tree".
: 递归的解法可行吗?我感觉好像不太行得通。

p*****2
发帖数: 21240
14

你这个不就是递归吗?
我当时没想到用global variable, 搞了半天没搞对。用global variable 看起来就好
多了。

【在 i**********e 的大作中提到】
: 刚加了这道题 “Recover Binary Search Tree".
: 递归的解法可行吗?我感觉好像不太行得通。

i**********e
发帖数: 1145
15
我意思是你们之前讨论那个递归的思路 - 传 min,max 到下面。

【在 p*****2 的大作中提到】
:
: 你这个不就是递归吗?
: 我当时没想到用global variable, 搞了半天没搞对。用global variable 看起来就好
: 多了。

p*****2
发帖数: 21240
16

那个好像不行。我就按照那个思路没搞定。后来在那个思路上修修补补总是不通。我觉
得你的才是正确的思路。规律很清晰,很好理解。

【在 i**********e 的大作中提到】
: 我意思是你们之前讨论那个递归的思路 - 传 min,max 到下面。
N********n
发帖数: 8363
17

如果只有两个的话应该好办。假设是升序,错位的两个数的特征是一个比
它身后的数大,另一个比它身前的书小。那么你就写一个的遍历程序找到
这两个节点然后交换一下就可以了。O(N)复杂度。

【在 a****o 的大作中提到】
: For example,
: 2
: / \
: 3 4
: /
: 1
: Actually, we need to swap 2 and 3. However, 2 is valid because initial min=
: INT_min and max= INT_MAX. How to deal this case?
:
: max

1 (共1页)
进入JobHunting版参与讨论
相关主题
Find the node with given value in binary tree in in-order问一道leetcode题:recover BST
Create Binary Tree from preorder and inorder arrays怎么理解递归解决的“swap every two elements in a linked list”?
如何判断两个BST的元素是一样的?请问排过序的list组建一个bst 复杂度是多少?
再来bitch一下fb家面试题讨论
leetcode里面的Recover Binary Search Tree怎么用O(1)space大概说一下昨天的Google Phone Interview
recover binary search tree 常数空间树 inorder下个节点最好办法是啥
问个G的电面题问一道二叉树遍历的问题? 谢谢!
Leetcode Recover Binary Search Tree一问BST 找重复节点数
相关话题的讨论汇总
话题: prev话题: max话题: swap话题: treenode