由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - fb电话面试
相关主题
求教google 电面 answerMS onsite 面经
请教两道F面试题的follow up报个电面面经,估计没戏了
讨论一道LeetCode题:Binary Tree Maximum Path Sum分享FB面筋
这道题的follow up不会做,感觉跪了,求大牛指教Tree的traversal也分BFS和DFS?
Bloomberg on-campus interview (failed) 求教min depth binary tree用recursive解法一般能过关麽?
rejected by facebook after 2nd phone interview请教一道Leetcode 题,多谢
这个九章算法培训有人用过吗?T第二轮面经
[面试题] 如何打印一个二叉树level by level?问leetcode上surrounded regions,新的test case出runtime error
相关话题的讨论汇总
话题: stack话题: root话题: dfs话题: null话题: treenode
进入JobHunting版参与讨论
1 (共1页)
r*****b
发帖数: 8
1
刚面试完第二轮.. 估计要挂.. 题很简单.. 今儿中邪了.
第一轮:
经典stack题 pop, push, getmin
实现一下strcmp
第二轮:
打印一棵二叉树最深的路径
实现一下strstr(char* haystack, char* needle) 不可以用strlen等库函数
注意一下 needle可能比haystack长.. (俺忘了这个..)
ps. 小印不善啊... 放我一个小时的鸽子... 唉.. :(
i**9
发帖数: 351
2
thanks for sharing
z*s
发帖数: 209
3
感谢分享!Bless 楼主!
要相信自己,我连面试机会都没有。
d******a
发帖数: 238
4
感谢分享,加油!
顺便问下楼主 打印一棵二叉树最深的路径怎么解决的?
我的想法是递归得到所有的路径,然后保存最长的,然后打印。
r*****b
发帖数: 8
5
DFS, 遇到叶子节点以后, check一下当前stack里面的节点数, 如果大于current max,
那么更新; 否则就继续DFS, 直到结束
基本和你的想法一样吧.

【在 d******a 的大作中提到】
: 感谢分享,加油!
: 顺便问下楼主 打印一棵二叉树最深的路径怎么解决的?
: 我的想法是递归得到所有的路径,然后保存最长的,然后打印。

d******a
发帖数: 238
6
感谢分享,加油!
顺便问下楼主 打印一棵二叉树最深的路径怎么解决的?
我的想法是递归得到所有的路径,然后保存最长的,然后打印。
g*********s
发帖数: 1782
7
空间复杂度有点高。
不如保存每个子树的深度,然后从根出发,选深度更大的前进。

【在 d******a 的大作中提到】
: 感谢分享,加油!
: 顺便问下楼主 打印一棵二叉树最深的路径怎么解决的?
: 我的想法是递归得到所有的路径,然后保存最长的,然后打印。

d******a
发帖数: 238
8
嗯,跟我想法一样。
g*********s
发帖数: 1782
9
这个strstr的实现里为什么要考虑needle长于haystack?我试了一下,可以自然处理啊。

【在 r*****b 的大作中提到】
: 刚面试完第二轮.. 估计要挂.. 题很简单.. 今儿中邪了.
: 第一轮:
: 经典stack题 pop, push, getmin
: 实现一下strcmp
: 第二轮:
: 打印一棵二叉树最深的路径
: 实现一下strstr(char* haystack, char* needle) 不可以用strlen等库函数
: 注意一下 needle可能比haystack长.. (俺忘了这个..)
: ps. 小印不善啊... 放我一个小时的鸽子... 唉.. :(

g*********s
发帖数: 1782
10
你是保留这个叶节点,然后假定有父指针,沿着父指针找上去?

,

【在 r*****b 的大作中提到】
: DFS, 遇到叶子节点以后, check一下当前stack里面的节点数, 如果大于current max,
: 那么更新; 否则就继续DFS, 直到结束
: 基本和你的想法一样吧.

相关主题
rejected by facebook after 2nd phone interviewMS onsite 面经
这个九章算法培训有人用过吗?报个电面面经,估计没戏了
[面试题] 如何打印一个二叉树level by level?分享FB面筋
进入JobHunting版参与讨论
h**********d
发帖数: 4313
11
祝福下楼主
btw, facebook也没给我面试机会..
g*********s
发帖数: 1782
12

这道题板上大牛有定论了吗?

【在 r*****b 的大作中提到】
: 刚面试完第二轮.. 估计要挂.. 题很简单.. 今儿中邪了.
: 第一轮:
: 经典stack题 pop, push, getmin
: 实现一下strcmp
: 第二轮:
: 打印一棵二叉树最深的路径
: 实现一下strstr(char* haystack, char* needle) 不可以用strlen等库函数
: 注意一下 needle可能比haystack长.. (俺忘了这个..)
: ps. 小印不善啊... 放我一个小时的鸽子... 唉.. :(

l*****a
发帖数: 14598
13
这题需要大牛吗?
只能遍历,找到所有路径,保留最大的
还能有啥别的招

【在 g*********s 的大作中提到】
:
: 这道题板上大牛有定论了吗?

g*********s
发帖数: 1782
14
我需要假定带父指针,两次遍历。
第一次计算出树高度,第二次根据树高找最深叶节点,然后根据父指针找上去。
找所有路径开销太大了。

【在 l*****a 的大作中提到】
: 这题需要大牛吗?
: 只能遍历,找到所有路径,保留最大的
: 还能有啥别的招

j*****u
发帖数: 1133
15
题目没有说就是没有父指针,而且计算树的高度也是要遍历所有节点的。
这个题没有tricky的解法,就是要么
DFS w/ backtracking,维护两个stack,一个记录root到当前节点的path,另一个记录
max,每次到了叶节点比较两个stack的节点数目并update max if necessary
要么BFS,queue node里面包含从root到该节点的path,返回queue最后一个node里的
path
时间都是O(n),空间DFS好一些

【在 g*********s 的大作中提到】
: 我需要假定带父指针,两次遍历。
: 第一次计算出树高度,第二次根据树高找最深叶节点,然后根据父指针找上去。
: 找所有路径开销太大了。

g*********s
发帖数: 1782
16
怎么记录到当前节点的路径?

【在 j*****u 的大作中提到】
: 题目没有说就是没有父指针,而且计算树的高度也是要遍历所有节点的。
: 这个题没有tricky的解法,就是要么
: DFS w/ backtracking,维护两个stack,一个记录root到当前节点的path,另一个记录
: max,每次到了叶节点比较两个stack的节点数目并update max if necessary
: 要么BFS,queue node里面包含从root到该节点的path,返回queue最后一个node里的
: path
: 时间都是O(n),空间DFS好一些

g*********s
发帖数: 1782
17
又想了一下,这个题用一遍BFS就可以了。在遍历的同时记录p[n]和d[n],这里p[n]是
节点n的父节
点,d[n]是root到节点n的距离。实际是Dijkstra的特例。
由于是树结构,时间复杂度O(N),空间复杂度O(N)。

【在 g*********s 的大作中提到】
: 怎么记录到当前节点的路径?
j*****u
发帖数: 1133
18
DFS solution的full code,最后print出来的是正确的order因为经历了2次stack的
revert
void PrintDeepestPath(TreeNode root)
{
if (root != null)
{
var maxPath = new Stack();
DFS(root, new Stack(), maxPath);
while (maxPath.Count > 0)
Console.WriteLine(maxPath.Pop().Value);
}
}
void DFS(TreeNode node, Stack currentPath, Stack maxPath)
{
currentPath.Push(node);
if (node.Left == null && node.Right == null)
{
if (currentPath.Count > maxPath.Count)
{
maxPath.Clear();
foreach (var n in currentPath)
maxPath.Push(n);
}
}
else
{
if (node.Left != null)
DFS(node.Left, currentPath, maxPath);
if (node.Right != null)
DFS(node.Right, currentPath, maxPath);
}
currentPath.Pop();
}

【在 g*********s 的大作中提到】
: 怎么记录到当前节点的路径?
j*****u
发帖数: 1133
19
BFS是可以的,如果tree是balanced的,DFS时间也是O(n)而且只遍历一遍,空间是O(log n)。

【在 g*********s 的大作中提到】
: 又想了一下,这个题用一遍BFS就可以了。在遍历的同时记录p[n]和d[n],这里p[n]是
: 节点n的父节
: 点,d[n]是root到节点n的距离。实际是Dijkstra的特例。
: 由于是树结构,时间复杂度O(N),空间复杂度O(N)。

g*********s
发帖数: 1782
20
你这个怎么能保证时间复杂度O(N)呢?
考虑特殊的BT,左儿子都是叶节点,按你这个方法,max_path要反复清空,复制current_
path,而
current_path的长度是1,2,...,n,那复杂度是O(N^2)啊。

【在 j*****u 的大作中提到】
: DFS solution的full code,最后print出来的是正确的order因为经历了2次stack的
: revert
: void PrintDeepestPath(TreeNode root)
: {
: if (root != null)
: {
: var maxPath = new Stack();
: DFS(root, new Stack(), maxPath);
: while (maxPath.Count > 0)
: Console.WriteLine(maxPath.Pop().Value);

相关主题
Tree的traversal也分BFS和DFS?T第二轮面经
min depth binary tree用recursive解法一般能过关麽?问leetcode上surrounded regions,新的test case出runtime error
请教一道Leetcode 题,多谢Tree Question: Longest path from root to a leaf
进入JobHunting版参与讨论
j*****u
发帖数: 1133
21
你是对的,worst case是O(n^2),所有的左节点都是叶节点,这时候BFS时间会好些
但是tree是balanced情况下还是DFS略好
这个很像quicksort在worst case下fallback to mergesort :)

current_

【在 g*********s 的大作中提到】
: 你这个怎么能保证时间复杂度O(N)呢?
: 考虑特殊的BT,左儿子都是叶节点,按你这个方法,max_path要反复清空,复制current_
: path,而
: current_path的长度是1,2,...,n,那复杂度是O(N^2)啊。

g*********s
发帖数: 1782
22
我感觉即使是bst也不能保证O(N),虽然一下构造不出反例。
但是反过来,你怎么证明bst下是O(N)?
关键做DFS,即使是balanced bst,你遇到的current_path路径可能仍然恰好是严格单
增的,这样
你要反复清空max_path再复制current_path。这里有个sigma。

【在 j*****u 的大作中提到】
: 你是对的,worst case是O(n^2),所有的左节点都是叶节点,这时候BFS时间会好些
: 但是tree是balanced情况下还是DFS略好
: 这个很像quicksort在worst case下fallback to mergesort :)
:
: current_

i**9
发帖数: 351
23
写了一个
”打印一棵二叉树最深的路径“
大家讨论讨论,这个程序打印所有的longest path,
void longestpath(Node * root,vector &v,int depth){
if(root==NULL){
return;
}
v.push_back(root->data);
if(v.size()==depth){
print(v);
return;
}
vector v2(v);
vector v3(v);
longestpath(root->left,v2,depth);
longestpath(root->right,v3,depth);
}
int main(){
Node * r = buildBST();
int d = maxdepth(r);
vector v;
longestpath(r,v,d);
return 0;
}
g*********s
发帖数: 1782
24
你这个还是两次遍历。

【在 i**9 的大作中提到】
: 写了一个
: ”打印一棵二叉树最深的路径“
: 大家讨论讨论,这个程序打印所有的longest path,
: void longestpath(Node * root,vector &v,int depth){
: if(root==NULL){
: return;
: }
: v.push_back(root->data);
: if(v.size()==depth){
: print(v);

E***n
发帖数: 166
25
能用DP吗?
扫描一遍,把所有node的深度都保存在一个数组里,然后从root开始,找深度最大的一
个child,扫描需要时间O(N),寻找需要时间O(n log n)
总共时间O(N),空间O(N)

【在 r*****b 的大作中提到】
: 刚面试完第二轮.. 估计要挂.. 题很简单.. 今儿中邪了.
: 第一轮:
: 经典stack题 pop, push, getmin
: 实现一下strcmp
: 第二轮:
: 打印一棵二叉树最深的路径
: 实现一下strstr(char* haystack, char* needle) 不可以用strlen等库函数
: 注意一下 needle可能比haystack长.. (俺忘了这个..)
: ps. 小印不善啊... 放我一个小时的鸽子... 唉.. :(

g*********s
发帖数: 1782
26
i don't see why this is dp. u mean dfs?

【在 E***n 的大作中提到】
: 能用DP吗?
: 扫描一遍,把所有node的深度都保存在一个数组里,然后从root开始,找深度最大的一
: 个child,扫描需要时间O(N),寻找需要时间O(n log n)
: 总共时间O(N),空间O(N)

E***n
发帖数: 166
27
抱歉,我说错了
我的方法复杂度太大了

【在 g*********s 的大作中提到】
: i don't see why this is dp. u mean dfs?
n*****e
发帖数: 2
28
打印一棵二叉树最深的路径 is very similar to findMaxDepthInBST
int findMaxDepthInBST(node* root)
{
if(!root)
return;
int left = findMaxDepthInBST(root->left);
int right = findMaxDepthInBST(root->right);
if(left>right)
return left+1;
else return right+1;
}
For deepest path from root to leaf:
Just change "left/right" from type "int" to type "vector" and compare
left.length() and right.length() then push(root) to the longer vector
finally return the longer vector
g**********r
发帖数: 27
g**********r
发帖数: 27
30
A very good link about the strstr problem
http://vijayinterviewquestions.blogspot.com/2007/07/write-c-cod
to-implement-strstr-search.html
相关主题
Leetcode bst max path-----is this solution correct?请教两道F面试题的follow up
F Onsite面经讨论一道LeetCode题:Binary Tree Maximum Path Sum
求教google 电面 answer这道题的follow up不会做,感觉跪了,求大牛指教
进入JobHunting版参与讨论
g***s
发帖数: 3811
31
"寻找需要时间O(n log n)"
should be 寻找需要时间worst case O(n).
the worst case it also needs scan twice. average time is n+lgn

【在 E***n 的大作中提到】
: 能用DP吗?
: 扫描一遍,把所有node的深度都保存在一个数组里,然后从root开始,找深度最大的一
: 个child,扫描需要时间O(N),寻找需要时间O(n log n)
: 总共时间O(N),空间O(N)

f*********i
发帖数: 197
32
对树的最长路径,只要DP就可以了啊,就是O(n)复杂度
public static Stack tree_print_longest_depth(BinaryTree root){
if(root==null)
return null;
Stack left = tree_print_longest_depth(root.leftChild);
Stack right = tree_print_longest_depth(root.rightChild);
if(left==null&&right==null){
Stack stack = new Stack ();
stack.push(root);
return stack;
}else if(left==null){
right.push(root);
return right;
}else if(right==null){
left.push(root);
return left;
}else if(left.size()>=right.size()){
left.push(root);
return left;
}else{
right.push(root);
return right;
}
}
C***y
发帖数: 2546
33
简单说一下大概的意思?

rightChild);

【在 f*********i 的大作中提到】
: 对树的最长路径,只要DP就可以了啊,就是O(n)复杂度
: public static Stack tree_print_longest_depth(BinaryTree root){
: if(root==null)
: return null;
: Stack left = tree_print_longest_depth(root.leftChild);
: Stack right = tree_print_longest_depth(root.rightChild);
: if(left==null&&right==null){
: Stack stack = new Stack ();
: stack.push(root);
: return stack;

1 (共1页)
进入JobHunting版参与讨论
相关主题
问leetcode上surrounded regions,新的test case出runtime errorBloomberg on-campus interview (failed) 求教
Tree Question: Longest path from root to a leafrejected by facebook after 2nd phone interview
Leetcode bst max path-----is this solution correct?这个九章算法培训有人用过吗?
F Onsite面经[面试题] 如何打印一个二叉树level by level?
求教google 电面 answerMS onsite 面经
请教两道F面试题的follow up报个电面面经,估计没戏了
讨论一道LeetCode题:Binary Tree Maximum Path Sum分享FB面筋
这道题的follow up不会做,感觉跪了,求大牛指教Tree的traversal也分BFS和DFS?
相关话题的讨论汇总
话题: stack话题: root话题: dfs话题: null话题: treenode