由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - T第二轮面经
相关主题
求教google 电面 answerfb电话面试
一道面试题二叉树最长路径 用 level order travel 做?
这个check whether a binary tree is a BST 问题今天面试惨败,分享面经
A家,link all node in the same lev为什么quicksort会比heapsort快?
一个老题binary tree找 lowest common ancestor 的code (请教c语言实现TreeFee
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径G家实习电面总结
生成树狗电面
G题,把binary tree里面的sibling节点连接起来狗狗家onsite面经
相关话题的讨论汇总
话题: int话题: node话题: root
进入JobHunting版参与讨论
1 (共1页)
s********s
发帖数: 49
1
前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
后开始做题,让merge k 个 sorted list,用heap做了。
第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
。顺便请教一下大家两个困扰我挺久的问题:
(1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,
因为我想明年一毕业就能直接去美国工作,这样的话势必要在明年三四月的时候找好
full time了吧,不然的话h1b神马的是不是会有问题?我这样的情况怎么样规划好一点
?求建议啊!
(2) 像这次面我的两个人在出题之前都说了句,要是题目我碰到过的话就和他们说,他
们可以换一个题目。那是不是每次碰到做过的题目,是不是实际中都是都要老实交代呢
,还是可以慢慢讲思路?
p*****2
发帖数: 21240
2
longest path前不久讨论过。没见过不太容易写好。
UW or UT? 其实题目见过能写好也不容易。
s********s
发帖数: 49
3

longest path我到时也去搜过,但是好多solution,有的也没看懂,大神给点思路?

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

l**b
发帖数: 457
4
longest path怎么定义的啊?tree里面任何2个node之间的距离?
s********s
发帖数: 49
5

恩,对的,就是这个意思。

【在 l**b 的大作中提到】
: longest path怎么定义的啊?tree里面任何2个node之间的距离?
p*****2
发帖数: 21240
6

你这个path是可以任意点开始,任意点结束吧?

【在 s********s 的大作中提到】
:
: 恩,对的,就是这个意思。

s********s
发帖数: 49
7

嗯,其实就是要求出任意两点之间的距离最长的那个吧

【在 p*****2 的大作中提到】
:
: 你这个path是可以任意点开始,任意点结束吧?

l**b
发帖数: 457
8
那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?

【在 s********s 的大作中提到】
:
: 嗯,其实就是要求出任意两点之间的距离最长的那个吧

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

老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
)。
然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
(负数要多考虑一些)

【在 s********s 的大作中提到】
:
: 嗯,其实就是要求出任意两点之间的距离最长的那个吧

l**b
发帖数: 457
10
BTW,赞面经,bless你快点找到工作。
1)越快有工作越好,这个是肯定的,H1-B什么的有工作了都好说。
相关主题
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径fb电话面试
生成树二叉树最长路径 用 level order travel 做?
G题,把binary tree里面的sibling节点连接起来今天面试惨败,分享面经
进入JobHunting版参与讨论
s********s
发帖数: 49
11

然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
(负数要多考虑一些)
这个某一节点是哪个节点?

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

d**********x
发帖数: 4083
12
leetcode真是啥都有啊。
这是我当年在国内被G灭的面试题。。。
我对G的心理阴影是无穷大。。。

【在 l**b 的大作中提到】
: 那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?
s********s
发帖数: 49
13

Thanks 啦! :)
那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?
还没刷到这个题的说>_<看来还是刷题不够多 555

【在 l**b 的大作中提到】
: BTW,赞面经,bless你快点找到工作。
: 1)越快有工作越好,这个是肯定的,H1-B什么的有工作了都好说。

l*****a
发帖数: 14598
14
你上次就问人家学校,这次又问

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

l*****a
发帖数: 14598
15
bless
打算吧你的2个面经存下来以后慢慢看

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

s********s
发帖数: 49
16

大神也在加拿大的么?这个找工作的规划求建议啊!!

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

g**e
发帖数: 6127
17
longest path难道不是肯定由两个leaf node组成的?

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

s********s
发帖数: 49
18

多谢多谢!!
你上次就问人家学校,这次又问
哈哈,恩恩,上次新人报道的时候其实就被问过了>_<

【在 l*****a 的大作中提到】
: bless
: 打算吧你的2个面经存下来以后慢慢看
:
: 路?

s********s
发帖数: 49
19

对,这个后来我也想了想,应该是这样子的

【在 g**e 的大作中提到】
: longest path难道不是肯定由两个leaf node组成的?
c*****a
发帖数: 808
20
练一下 不知道对不对
static int maxPath=0;
private static int longestPath(BSTNode node){
if(node==null) return 0;
int left = longestPath(node.left);
int right = longestPath(node.right);
maxPath = Math.max(left+right, maxPath);
return Math.max(left, right)+1;
}
相关主题
为什么quicksort会比heapsort快?狗电面
c语言实现TreeFee狗狗家onsite面经
G家实习电面总结感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
进入JobHunting版参与讨论
l*****a
发帖数: 14598
21
你说的比他问的难多了
他那个不需要care结点的值

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

g**e
发帖数: 6127
22
o
/
o
/ \
o o
/ \
o o

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

s********s
发帖数: 49
23

嗯,我这个是没权值的,大神给个简单易懂的思路? :P

【在 l*****a 的大作中提到】
: 你说的比他问的难多了
: 他那个不需要care结点的值

c**s
发帖数: 159
24
树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。
s********s
发帖数: 49
25

这个思路倒是简单而且清晰,只是怎么解释一下这样子为什么一定是最长呢?

【在 c**s 的大作中提到】
: 树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
: 第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。

f*****7
发帖数: 92
26
显然是用divide-and-conquer求diameter
最远的两个点一定是叶子,否则cut-and-paste,我们总能找到更长的
二叉树可以用modified post-order做,因为后序遍历的实质就是分治
n-ary tree,可以用两次BFS,证明很难,搜一下就有了
l*****a
发帖数: 14598
27
最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
3种可能性递归

【在 s********s 的大作中提到】
:
: 这个思路倒是简单而且清晰,只是怎么解释一下这样子为什么一定是最长呢?

g**e
发帖数: 6127
28
正解
这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
他们is_bst

【在 l*****a 的大作中提到】
: 最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
: 3种可能性递归

l*****a
发帖数: 14598
29
你把path跟深度混淆了

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

c*****a
发帖数: 808
30
测试了下,是4
对不对

【在 g**e 的大作中提到】
: 正解
: 这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
: 他们is_bst

相关主题
G的一道考题一道面试题
Tree Question: Longest path from root to a leaf这个check whether a binary tree is a BST 问题
求教google 电面 answerA家,link all node in the same lev
进入JobHunting版参与讨论
g**e
发帖数: 6127
31
显然不对啊,longest path明明是5

【在 c*****a 的大作中提到】
: 测试了下,是4
: 对不对

c*****a
发帖数: 808
32
maximum sum of bst那种?

【在 l*****a 的大作中提到】
: 你把path跟深度混淆了
c*****a
发帖数: 808
33
哦,我以为是算edges,这样就5了
static int maxPath=0;
private static int longestPath(BSTNode node){
if(node==null) return 0;
int left = longestPath(node.left);
int right = longestPath(node.right);
maxPath = Math.max(left+right+1, maxPath);
return Math.max(left, right)+1;
}

【在 g**e 的大作中提到】
: 显然不对啊,longest path明明是5
s********s
发帖数: 49
34

这个很make sense!!

【在 l*****a 的大作中提到】
: 最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
: 3种可能性递归

s********s
发帖数: 49
35

is_bst是让判断是不是bianry search tree?也是一个递归进行判断吧?

【在 g**e 的大作中提到】
: 正解
: 这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
: 他们is_bst

l***i
发帖数: 1309
36
Given root of tree, longest path either uses root or not.
struct Node {
vector children;
};
int longest_path(Node *root)
{
return longest(root).first;
}
// returns (first, second)
// first is longest path length within subtree at root
// second is longest path length from any leaf to root
pair longest(Node *root)
{
if (root == NULL) return make_pair(0,0);
// best is length of longest path fully contained in this subtree,
// single is length of longest path from a leaf to root
int best = 0, single = 0;
int nchild = root->children.size();
vector child_len(nchild, 0);
for (int i=0; i pair p = longest(root->children[i]);
child_len[i] = p.second;
best = max(best, p.first);
}
if (nchild == 0) return make_pair(1, 1);
sort(child_len.begin(), child_len.end(), greater());
single = 1 + child_len[0];
if (nchild == 1) {
best = max(best, single);
} else {
best = max(best, single + child_len[1]);
}
return make_pair(best, single);
}
g**e
发帖数: 6127
37
银行来的哥们一般是in order traverse然后判断是不是单调递增,再补问一句如何优
化一般就都挂了。
唯一一个用递归解出来的哥们不知道什么是BST,我给他举了几个例子他就写出来了。
当然,人家把我们的offer据了

【在 s********s 的大作中提到】
:
: is_bst是让判断是不是bianry search tree?也是一个递归进行判断吧?

d**********x
发帖数: 4083
38
两次bfs没什么难的啊
我记得是反证法解决
找个高中小孩来证肯定三下五除二就出来了

【在 f*****7 的大作中提到】
: 显然是用divide-and-conquer求diameter
: 最远的两个点一定是叶子,否则cut-and-paste,我们总能找到更长的
: 二叉树可以用modified post-order做,因为后序遍历的实质就是分治
: n-ary tree,可以用两次BFS,证明很难,搜一下就有了

l*****a
发帖数: 14598
39

用的是MAX_VALUE/MIN_VALUE那种解法?
嫌你们给的少?

【在 g**e 的大作中提到】
: 银行来的哥们一般是in order traverse然后判断是不是单调递增,再补问一句如何优
: 化一般就都挂了。
: 唯一一个用递归解出来的哥们不知道什么是BST,我给他举了几个例子他就写出来了。
: 当然,人家把我们的offer据了

g**e
发帖数: 6127
40
面SDE2,给的SDE3,应该还不错吧
这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
水平相当高

何优
了。

【在 l*****a 的大作中提到】
:
: 用的是MAX_VALUE/MIN_VALUE那种解法?
: 嫌你们给的少?

相关主题
A家,link all node in the same lev生成树
一个老题binary tree找 lowest common ancestor 的code (请教G题,把binary tree里面的sibling节点连接起来
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径fb电话面试
进入JobHunting版参与讨论
l*****a
发帖数: 14598
41
这牛人哪国的?原来什么厂
估计半路出家,但是很聪明

【在 g**e 的大作中提到】
: 面SDE2,给的SDE3,应该还不错吧
: 这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
: 水平相当高
:
: 何优
: 了。

s********s
发帖数: 49
42

gate是在?Amazon?

【在 g**e 的大作中提到】
: 面SDE2,给的SDE3,应该还不错吧
: 这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
: 水平相当高
:
: 何优
: 了。

g**e
发帖数: 6127
43
某英国银行VP,之前在IBM。确实如你所说,非常聪明,而且大规模分布式计算的经验
很多,所以在bar raiser的强烈要求下,给了SDE3

【在 l*****a 的大作中提到】
: 这牛人哪国的?原来什么厂
: 估计半路出家,但是很聪明

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

那就相当于每个节点的值都是1吧。

【在 l*****a 的大作中提到】
: 你说的比他问的难多了
: 他那个不需要care结点的值

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

没看明白,第二次dfs怎么搞?第一次找到的是叶子吧?怎么从这个开始dfs呢?

【在 c**s 的大作中提到】
: 树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
: 第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。

l*******b
发帖数: 2586
46
tree 有parent指针哪里都可以当root吧。嗯
或者有第一次搜索得到的路径也够用了

【在 p*****2 的大作中提到】
:
: 没看明白,第二次dfs怎么搞?第一次找到的是叶子吧?怎么从这个开始dfs呢?

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

题目没说有parent吧?把路径存下来的话,coding感觉也没有简单吧。

【在 l*******b 的大作中提到】
: tree 有parent指针哪里都可以当root吧。嗯
: 或者有第一次搜索得到的路径也够用了

h*******e
发帖数: 1377
48
拎兩次樹那道題。。
l*******b
发帖数: 2586
49
想起来感觉还行,第一次的存在一个stack里,总是先搜child,需要朝parent方向搜索
的时候pop出来填到现在搜索的路径里就好了

【在 p*****2 的大作中提到】
:
: 题目没说有parent吧?把路径存下来的话,coding感觉也没有简单吧。

s********l
发帖数: 998
50
VP? 为什么他要转行做sde啊?

【在 g**e 的大作中提到】
: 某英国银行VP,之前在IBM。确实如你所说,非常聪明,而且大规模分布式计算的经验
: 很多,所以在bar raiser的强烈要求下,给了SDE3

相关主题
二叉树最长路径 用 level order travel 做?c语言实现TreeFee
今天面试惨败,分享面经G家实习电面总结
为什么quicksort会比heapsort快?狗电面
进入JobHunting版参与讨论
s********l
发帖数: 998
51
你第一题用heap? 一个k size的heap?

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

s**s
发帖数: 70
52
这个思路的确不错。 想了一下,可以反证,用cut-paste来证明第一次dfs的结果为最
长路径的端点。

【在 s********s 的大作中提到】
:
: gate是在?Amazon?

f*********m
发帖数: 726
53
感觉可以用类似于leetcode Binary Tree Maximum Path Sum的思路:不过每个node要
考虑有N个chidren,每个node包括的值为1。
大牛们有何见解?

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

l*****a
发帖数: 14598
54
金融界的VP顶多是个小lead,甚至很多时候没有report
就算个Sr software engineer?

【在 s********l 的大作中提到】
: VP? 为什么他要转行做sde啊?
h*******e
发帖数: 1377
55
算小組長吧 MD還是很牛的 http://blog.sina.com.cn/s/blog_4cf8aad30102dz44.html

【在 l*****a 的大作中提到】
: 金融界的VP顶多是个小lead,甚至很多时候没有report
: 就算个Sr software engineer?

w****x
发帖数: 2483
56
等等,这题的最大路径不考虑权值把,那递归不久出来了?
f*********m
发帖数: 726
57
可以考虑所有节点相同的权值,所以sum为节点的个数。

【在 w****x 的大作中提到】
: 等等,这题的最大路径不考虑权值把,那递归不久出来了?
f*******t
发帖数: 7549
58
这题还好吧,代码很简单:
class TreeNodeStatus {
int maxLength;
int maxDepth;
}

private TreeNodeStatus getTreeNodeStatus(TreeNode node) {
TreeNodeStatus status = new TreeNodeStatus();
if (node == null) {
status.maxLength = 0;
status.maxDepth = 0;
} else if (node.left == null && node.right == null) {
status.maxLength = 1;
status.maxDepth = 1;
} else {
TreeNodeStatus leftStatus = getTreeNodeStatus(node.left);
TreeNodeStatus rightStatus = getTreeNodeStatus(node.right);
status.maxDepth = Math.max(leftStatus.maxDepth + 1, rightStatus.
maxDepth + 1);
status.maxLength = Math.max(leftStatus.maxLength, rightStatus.
maxLength);
status.maxLength = Math.max(status.maxLength, leftStatus.
maxDepth + rightStatus.maxDepth + 1);
}

return status;
}

public int longestPath(TreeNode root) {
TreeNodeStatus status = getTreeNodeStatus(root);

return status.maxLength;
}
f*********m
发帖数: 726
59
这个思路和leetcode的Binary Tree Maximum Path Sum一样吧。

【在 c*****a 的大作中提到】
: 哦,我以为是算edges,这样就5了
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right+1, maxPath);
: return Math.max(left, right)+1;
: }

c********t
发帖数: 5706
60
思路差不多吧。
不过有bug, maxPath = Math.max(left+right+2, maxPath);而且事先还要判断left or
right是不是 0, 有0就不是left+right+2了,要分情况处理了。
还有哦,题目没说是二叉树。
ls那些人为啥不赞同你啊?

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

相关主题
狗狗家onsite面经Tree Question: Longest path from root to a leaf
感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的求教google 电面 answer
G的一道考题一道面试题
进入JobHunting版参与讨论
c********t
发帖数: 5706
61
欢迎回来啊!
我也没明白为啥就变复杂了。

【在 w****x 的大作中提到】
: 等等,这题的最大路径不考虑权值把,那递归不久出来了?
f*********m
发帖数: 726
62
rp不行,呵呵。

or

【在 c********t 的大作中提到】
: 思路差不多吧。
: 不过有bug, maxPath = Math.max(left+right+2, maxPath);而且事先还要判断left or
: right是不是 0, 有0就不是left+right+2了,要分情况处理了。
: 还有哦,题目没说是二叉树。
: ls那些人为啥不赞同你啊?

x*****0
发帖数: 452
63
mark
s********s
发帖数: 49
64
前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
后开始做题,让merge k 个 sorted list,用heap做了。
第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
。顺便请教一下大家两个困扰我挺久的问题:
(1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,
因为我想明年一毕业就能直接去美国工作,这样的话势必要在明年三四月的时候找好
full time了吧,不然的话h1b神马的是不是会有问题?我这样的情况怎么样规划好一点
?求建议啊!
(2) 像这次面我的两个人在出题之前都说了句,要是题目我碰到过的话就和他们说,他
们可以换一个题目。那是不是每次碰到做过的题目,是不是实际中都是都要老实交代呢
,还是可以慢慢讲思路?
p*****2
发帖数: 21240
65
longest path前不久讨论过。没见过不太容易写好。
UW or UT? 其实题目见过能写好也不容易。
s********s
发帖数: 49
66

longest path我到时也去搜过,但是好多solution,有的也没看懂,大神给点思路?

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

l**b
发帖数: 457
67
longest path怎么定义的啊?tree里面任何2个node之间的距离?
s********s
发帖数: 49
68

恩,对的,就是这个意思。

【在 l**b 的大作中提到】
: longest path怎么定义的啊?tree里面任何2个node之间的距离?
p*****2
发帖数: 21240
69

你这个path是可以任意点开始,任意点结束吧?

【在 s********s 的大作中提到】
:
: 恩,对的,就是这个意思。

s********s
发帖数: 49
70

嗯,其实就是要求出任意两点之间的距离最长的那个吧

【在 p*****2 的大作中提到】
:
: 你这个path是可以任意点开始,任意点结束吧?

相关主题
一道面试题一个老题binary tree找 lowest common ancestor 的code (请教
这个check whether a binary tree is a BST 问题讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
A家,link all node in the same lev生成树
进入JobHunting版参与讨论
l**b
发帖数: 457
71
那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?

【在 s********s 的大作中提到】
:
: 嗯,其实就是要求出任意两点之间的距离最长的那个吧

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

老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
)。
然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
(负数要多考虑一些)

【在 s********s 的大作中提到】
:
: 嗯,其实就是要求出任意两点之间的距离最长的那个吧

l**b
发帖数: 457
73
BTW,赞面经,bless你快点找到工作。
1)越快有工作越好,这个是肯定的,H1-B什么的有工作了都好说。
s********s
发帖数: 49
74

然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
(负数要多考虑一些)
这个某一节点是哪个节点?

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

d**********x
发帖数: 4083
75
leetcode真是啥都有啊。
这是我当年在国内被G灭的面试题。。。
我对G的心理阴影是无穷大。。。

【在 l**b 的大作中提到】
: 那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?
s********s
发帖数: 49
76

Thanks 啦! :)
那我觉得是不是可以套用leetcode上面的Binary Tree Max Path Sum的思路啊?
还没刷到这个题的说>_<看来还是刷题不够多 555

【在 l**b 的大作中提到】
: BTW,赞面经,bless你快点找到工作。
: 1)越快有工作越好,这个是肯定的,H1-B什么的有工作了都好说。

l*****a
发帖数: 14598
77
你上次就问人家学校,这次又问

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

l*****a
发帖数: 14598
78
bless
打算吧你的2个面经存下来以后慢慢看

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

s********s
发帖数: 49
79

大神也在加拿大的么?这个找工作的规划求建议啊!!

【在 p*****2 的大作中提到】
: longest path前不久讨论过。没见过不太容易写好。
: UW or UT? 其实题目见过能写好也不容易。

g**e
发帖数: 6127
80
longest path难道不是肯定由两个leaf node组成的?

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

相关主题
G题,把binary tree里面的sibling节点连接起来今天面试惨败,分享面经
fb电话面试为什么quicksort会比heapsort快?
二叉树最长路径 用 level order travel 做?c语言实现TreeFee
进入JobHunting版参与讨论
s********s
发帖数: 49
81

多谢多谢!!
你上次就问人家学校,这次又问
哈哈,恩恩,上次新人报道的时候其实就被问过了>_<

【在 l*****a 的大作中提到】
: bless
: 打算吧你的2个面经存下来以后慢慢看
:
: 路?

s********s
发帖数: 49
82

对,这个后来我也想了想,应该是这样子的

【在 g**e 的大作中提到】
: longest path难道不是肯定由两个leaf node组成的?
c*****a
发帖数: 808
83
练一下 不知道对不对
static int maxPath=0;
private static int longestPath(BSTNode node){
if(node==null) return 0;
int left = longestPath(node.left);
int right = longestPath(node.right);
maxPath = Math.max(left+right, maxPath);
return Math.max(left, right)+1;
}
l*****a
发帖数: 14598
84
你说的比他问的难多了
他那个不需要care结点的值

【在 p*****2 的大作中提到】
:
: 老算法。用dfs,返回从输入节点开始的子树的最长路径 (输入节点到子树的任意节点
: )。
: 然后对某一节点的所有孩子做这个操作。最长的发生就是两个最长的子树+节点本身。
: (负数要多考虑一些)

g**e
发帖数: 6127
85
o
/
o
/ \
o o
/ \
o o

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

s********s
发帖数: 49
86

嗯,我这个是没权值的,大神给个简单易懂的思路? :P

【在 l*****a 的大作中提到】
: 你说的比他问的难多了
: 他那个不需要care结点的值

c**s
发帖数: 159
87
树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。
s********s
发帖数: 49
88

这个思路倒是简单而且清晰,只是怎么解释一下这样子为什么一定是最长呢?

【在 c**s 的大作中提到】
: 树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
: 第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。

f*****7
发帖数: 92
89
显然是用divide-and-conquer求diameter
最远的两个点一定是叶子,否则cut-and-paste,我们总能找到更长的
二叉树可以用modified post-order做,因为后序遍历的实质就是分治
n-ary tree,可以用两次BFS,证明很难,搜一下就有了
l*****a
发帖数: 14598
90
最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
3种可能性递归

【在 s********s 的大作中提到】
:
: 这个思路倒是简单而且清晰,只是怎么解释一下这样子为什么一定是最长呢?

相关主题
G家实习电面总结感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
狗电面G的一道考题
狗狗家onsite面经Tree Question: Longest path from root to a leaf
进入JobHunting版参与讨论
g**e
发帖数: 6127
91
正解
这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
他们is_bst

【在 l*****a 的大作中提到】
: 最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
: 3种可能性递归

l*****a
发帖数: 14598
92
你把path跟深度混淆了

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

c*****a
发帖数: 808
93
测试了下,是4
对不对

【在 g**e 的大作中提到】
: 正解
: 这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
: 他们is_bst

g**e
发帖数: 6127
94
显然不对啊,longest path明明是5

【在 c*****a 的大作中提到】
: 测试了下,是4
: 对不对

c*****a
发帖数: 808
95
maximum sum of bst那种?

【在 l*****a 的大作中提到】
: 你把path跟深度混淆了
c*****a
发帖数: 808
96
哦,我以为是算edges,这样就5了
static int maxPath=0;
private static int longestPath(BSTNode node){
if(node==null) return 0;
int left = longestPath(node.left);
int right = longestPath(node.right);
maxPath = Math.max(left+right+1, maxPath);
return Math.max(left, right)+1;
}

【在 g**e 的大作中提到】
: 显然不对啊,longest path明明是5
s********s
发帖数: 49
97

这个很make sense!!

【在 l*****a 的大作中提到】
: 最大路径可能在左子树,也可能在右子树,或者两子树最深结点(通过root)
: 3种可能性递归

s********s
发帖数: 49
98

is_bst是让判断是不是bianry search tree?也是一个递归进行判断吧?

【在 g**e 的大作中提到】
: 正解
: 这个题我也尝试着Onsite的时候问几个哥们,完全没有clue。我后来还是老老实实的问
: 他们is_bst

l***i
发帖数: 1309
99
Given root of tree, longest path either uses root or not.
struct Node {
vector children;
};
int longest_path(Node *root)
{
return longest(root).first;
}
// returns (first, second)
// first is longest path length within subtree at root
// second is longest path length from any leaf to root
pair longest(Node *root)
{
if (root == NULL) return make_pair(0,0);
// best is length of longest path fully contained in this subtree,
// single is length of longest path from a leaf to root
int best = 0, single = 0;
int nchild = root->children.size();
vector child_len(nchild, 0);
for (int i=0; i pair p = longest(root->children[i]);
child_len[i] = p.second;
best = max(best, p.first);
}
if (nchild == 0) return make_pair(1, 1);
sort(child_len.begin(), child_len.end(), greater());
single = 1 + child_len[0];
if (nchild == 1) {
best = max(best, single);
} else {
best = max(best, single + child_len[1]);
}
return make_pair(best, single);
}
g**e
发帖数: 6127
100
银行来的哥们一般是in order traverse然后判断是不是单调递增,再补问一句如何优
化一般就都挂了。
唯一一个用递归解出来的哥们不知道什么是BST,我给他举了几个例子他就写出来了。
当然,人家把我们的offer据了

【在 s********s 的大作中提到】
:
: is_bst是让判断是不是bianry search tree?也是一个递归进行判断吧?

相关主题
求教google 电面 answerA家,link all node in the same lev
一道面试题一个老题binary tree找 lowest common ancestor 的code (请教
这个check whether a binary tree is a BST 问题讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
进入JobHunting版参与讨论
d**********x
发帖数: 4083
101
两次bfs没什么难的啊
我记得是反证法解决
找个高中小孩来证肯定三下五除二就出来了

【在 f*****7 的大作中提到】
: 显然是用divide-and-conquer求diameter
: 最远的两个点一定是叶子,否则cut-and-paste,我们总能找到更长的
: 二叉树可以用modified post-order做,因为后序遍历的实质就是分治
: n-ary tree,可以用两次BFS,证明很难,搜一下就有了

l*****a
发帖数: 14598
102

用的是MAX_VALUE/MIN_VALUE那种解法?
嫌你们给的少?

【在 g**e 的大作中提到】
: 银行来的哥们一般是in order traverse然后判断是不是单调递增,再补问一句如何优
: 化一般就都挂了。
: 唯一一个用递归解出来的哥们不知道什么是BST,我给他举了几个例子他就写出来了。
: 当然,人家把我们的offer据了

g**e
发帖数: 6127
103
面SDE2,给的SDE3,应该还不错吧
这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
水平相当高

何优
了。

【在 l*****a 的大作中提到】
:
: 用的是MAX_VALUE/MIN_VALUE那种解法?
: 嫌你们给的少?

l*****a
发帖数: 14598
104
这牛人哪国的?原来什么厂
估计半路出家,但是很聪明

【在 g**e 的大作中提到】
: 面SDE2,给的SDE3,应该还不错吧
: 这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
: 水平相当高
:
: 何优
: 了。

s********s
发帖数: 49
105

gate是在?Amazon?

【在 g**e 的大作中提到】
: 面SDE2,给的SDE3,应该还不错吧
: 这哥们比较奇葩,不知道什么是BST,Heap。但是告诉他概念以后很快就能写出答案。
: 水平相当高
:
: 何优
: 了。

g**e
发帖数: 6127
106
某英国银行VP,之前在IBM。确实如你所说,非常聪明,而且大规模分布式计算的经验
很多,所以在bar raiser的强烈要求下,给了SDE3

【在 l*****a 的大作中提到】
: 这牛人哪国的?原来什么厂
: 估计半路出家,但是很聪明

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

那就相当于每个节点的值都是1吧。

【在 l*****a 的大作中提到】
: 你说的比他问的难多了
: 他那个不需要care结点的值

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

没看明白,第二次dfs怎么搞?第一次找到的是叶子吧?怎么从这个开始dfs呢?

【在 c**s 的大作中提到】
: 树里longest path是个经典问题,经典解法是两次dfs。第一次dfs记录最深那个节点。
: 第二次从这个节点出发再dfs到最深的那个节点,这两个节点的距离最长。

l*******b
发帖数: 2586
109
tree 有parent指针哪里都可以当root吧。嗯
或者有第一次搜索得到的路径也够用了

【在 p*****2 的大作中提到】
:
: 没看明白,第二次dfs怎么搞?第一次找到的是叶子吧?怎么从这个开始dfs呢?

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

题目没说有parent吧?把路径存下来的话,coding感觉也没有简单吧。

【在 l*******b 的大作中提到】
: tree 有parent指针哪里都可以当root吧。嗯
: 或者有第一次搜索得到的路径也够用了

相关主题
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径fb电话面试
生成树二叉树最长路径 用 level order travel 做?
G题,把binary tree里面的sibling节点连接起来今天面试惨败,分享面经
进入JobHunting版参与讨论
h*******e
发帖数: 1377
111
拎兩次樹那道題。。
l*******b
发帖数: 2586
112
想起来感觉还行,第一次的存在一个stack里,总是先搜child,需要朝parent方向搜索
的时候pop出来填到现在搜索的路径里就好了

【在 p*****2 的大作中提到】
:
: 题目没说有parent吧?把路径存下来的话,coding感觉也没有简单吧。

s********l
发帖数: 998
113
VP? 为什么他要转行做sde啊?

【在 g**e 的大作中提到】
: 某英国银行VP,之前在IBM。确实如你所说,非常聪明,而且大规模分布式计算的经验
: 很多,所以在bar raiser的强烈要求下,给了SDE3

s********l
发帖数: 998
114
你第一题用heap? 一个k size的heap?

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

s**s
发帖数: 70
115
这个思路的确不错。 想了一下,可以反证,用cut-paste来证明第一次dfs的结果为最
长路径的端点。

【在 s********s 的大作中提到】
:
: gate是在?Amazon?

f*********m
发帖数: 726
116
感觉可以用类似于leetcode Binary Tree Maximum Path Sum的思路:不过每个node要
考虑有N个chidren,每个node包括的值为1。
大牛们有何见解?

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

l*****a
发帖数: 14598
117
金融界的VP顶多是个小lead,甚至很多时候没有report
就算个Sr software engineer?

【在 s********l 的大作中提到】
: VP? 为什么他要转行做sde啊?
h*******e
发帖数: 1377
118
算小組長吧 MD還是很牛的 http://blog.sina.com.cn/s/blog_4cf8aad30102dz44.html

【在 l*****a 的大作中提到】
: 金融界的VP顶多是个小lead,甚至很多时候没有report
: 就算个Sr software engineer?

w****x
发帖数: 2483
119
等等,这题的最大路径不考虑权值把,那递归不久出来了?
f*********m
发帖数: 726
120
可以考虑所有节点相同的权值,所以sum为节点的个数。

【在 w****x 的大作中提到】
: 等等,这题的最大路径不考虑权值把,那递归不久出来了?
相关主题
为什么quicksort会比heapsort快?狗电面
c语言实现TreeFee狗狗家onsite面经
G家实习电面总结感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的
进入JobHunting版参与讨论
f*******t
发帖数: 7549
121
这题还好吧,代码很简单:
class TreeNodeStatus {
int maxLength;
int maxDepth;
}

private TreeNodeStatus getTreeNodeStatus(TreeNode node) {
TreeNodeStatus status = new TreeNodeStatus();
if (node == null) {
status.maxLength = 0;
status.maxDepth = 0;
} else if (node.left == null && node.right == null) {
status.maxLength = 1;
status.maxDepth = 1;
} else {
TreeNodeStatus leftStatus = getTreeNodeStatus(node.left);
TreeNodeStatus rightStatus = getTreeNodeStatus(node.right);
status.maxDepth = Math.max(leftStatus.maxDepth + 1, rightStatus.
maxDepth + 1);
status.maxLength = Math.max(leftStatus.maxLength, rightStatus.
maxLength);
status.maxLength = Math.max(status.maxLength, leftStatus.
maxDepth + rightStatus.maxDepth + 1);
}

return status;
}

public int longestPath(TreeNode root) {
TreeNodeStatus status = getTreeNodeStatus(root);

return status.maxLength;
}
f*********m
发帖数: 726
122
这个思路和leetcode的Binary Tree Maximum Path Sum一样吧。

【在 c*****a 的大作中提到】
: 哦,我以为是算edges,这样就5了
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right+1, maxPath);
: return Math.max(left, right)+1;
: }

c********t
发帖数: 5706
123
思路差不多吧。
不过有bug, maxPath = Math.max(left+right+2, maxPath);而且事先还要判断left or
right是不是 0, 有0就不是left+right+2了,要分情况处理了。
还有哦,题目没说是二叉树。
ls那些人为啥不赞同你啊?

【在 c*****a 的大作中提到】
: 练一下 不知道对不对
: static int maxPath=0;
: private static int longestPath(BSTNode node){
: if(node==null) return 0;
: int left = longestPath(node.left);
: int right = longestPath(node.right);
: maxPath = Math.max(left+right, maxPath);
: return Math.max(left, right)+1;
: }

c********t
发帖数: 5706
124
欢迎回来啊!
我也没明白为啥就变复杂了。

【在 w****x 的大作中提到】
: 等等,这题的最大路径不考虑权值把,那递归不久出来了?
f*********m
发帖数: 726
125
rp不行,呵呵。

or

【在 c********t 的大作中提到】
: 思路差不多吧。
: 不过有bug, maxPath = Math.max(left+right+2, maxPath);而且事先还要判断left or
: right是不是 0, 有0就不是left+right+2了,要分情况处理了。
: 还有哦,题目没说是二叉树。
: ls那些人为啥不赞同你啊?

x*****0
发帖数: 452
126
mark
j********x
发帖数: 2330
127
楼主可惜了
b*****g
发帖数: 145
128
同问第二个问题。。
s****y
发帖数: 503
129
H1B是个问题
j*********g
发帖数: 36
130
For 2, for each edge (u,v) find the longest path from u to a leaf that doesn
't contain (u,v); do the same for v. You can do this in linear time,
starting from leaves.
相关主题
G的一道考题一道面试题
Tree Question: Longest path from root to a leaf这个check whether a binary tree is a BST 问题
求教google 电面 answerA家,link all node in the same lev
进入JobHunting版参与讨论
s********x
发帖数: 914
131
抛砖引玉写了一个哈
// return [farthest path from root, longest path]
public static int[] getLongestPathInTree(TreeNode p) {
int farthestPathFromRoot = 0, secondFarthestPathFromRoot = 0,
longestPath = 0;
for (TreeNode child : p.getChildren()) {
int[] result = getLongestPathInTree(child);
int pathToFarthestChild = result[0] + child.weightToParent;
if (pathToFarthestChild > farthestPathFromRoot) {
secondFarthestPathFromRoot = farthestPathFromRoot;
farthestPathFromRoot = pathToFarthestChild;
}

if (result[1] > longestPath) {
longestPath = result[1];
}
}

if (secondFarthestPathFromRoot + farthestPathFromRoot > longestPath)
{
longestPath = secondFarthestPathFromRoot + farthestPathFromRoot;
}

return new int[] {farthestPathFromRoot, longestPath};
}

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

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

没说一定是从root开始吧?

【在 s********x 的大作中提到】
: 抛砖引玉写了一个哈
: // return [farthest path from root, longest path]
: public static int[] getLongestPathInTree(TreeNode p) {
: int farthestPathFromRoot = 0, secondFarthestPathFromRoot = 0,
: longestPath = 0;
: for (TreeNode child : p.getChildren()) {
: int[] result = getLongestPathInTree(child);
: int pathToFarthestChild = result[0] + child.weightToParent;
: if (pathToFarthestChild > farthestPathFromRoot) {
: secondFarthestPathFromRoot = farthestPathFromRoot;

s********x
发帖数: 914
133
对的,在recursion中的某个root,即longestPath可以经过任意node

【在 p*****2 的大作中提到】
:
: 没说一定是从root开始吧?

r****c
发帖数: 2585
134
给两个不同算法吧,就不写code了
1. 第一种,比较容易懂。longest path可能很多,但是所有longest path只有一个点
是largest depth from root,也就是tree depth。(用反证法来证明这个observation
)。先找任意一个叶子节点是largest distance from root,然后用这个点作为root,
找largest distance from root
2. 第二种,写程序比较方便,recursive,找到longest path AND largest depth of
the tree
say d(T) and L(T)
then d(T) = max (d(T->left), d(d-right))
L(T) = max( L(T->left), L(T->right), d(T->left) + d(T->Right) + 1)
p*****2
发帖数: 21240
135

observation
of
没说是二叉树吧?

【在 r****c 的大作中提到】
: 给两个不同算法吧,就不写code了
: 1. 第一种,比较容易懂。longest path可能很多,但是所有longest path只有一个点
: 是largest depth from root,也就是tree depth。(用反证法来证明这个observation
: )。先找任意一个叶子节点是largest distance from root,然后用这个点作为root,
: 找largest distance from root
: 2. 第二种,写程序比较方便,recursive,找到longest path AND largest depth of
: the tree
: say d(T) and L(T)
: then d(T) = max (d(T->left), d(d-right))
: L(T) = max( L(T->left), L(T->right), d(T->left) + d(T->Right) + 1)

s********x
发帖数: 914
136
我的思路基本上就是二叉树的变种罢了。我写的code就是楼上说的思路

【在 p*****2 的大作中提到】
:
: observation
: of
: 没说是二叉树吧?

x*******i
发帖数: 26
137
跟那个二叉树最大path sum思路差不多吧。
递归所有子树,每个返回两个值(包括根节点的最长路径 a_i, 所有的最长路径b_i)
,然后把这些值归总来算当前的两个值( max(a_i)+1, max(all b_i's , 1+最大的两
个a_i))

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

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

应该比那个还简单一点

【在 x*******i 的大作中提到】
: 跟那个二叉树最大path sum思路差不多吧。
: 递归所有子树,每个返回两个值(包括根节点的最长路径 a_i, 所有的最长路径b_i)
: ,然后把这些值归总来算当前的两个值( max(a_i)+1, max(all b_i's , 1+最大的两
: 个a_i))
:
: 路?

h**o
发帖数: 548
139
the same as Diameter of a Binary Tree 吧。
longest path(LP) of root = max(LP of root->left, LP of root->right, height(
root->left)+height(root->right)+1).
height 和 LP of children 可以一起算。
多子的情况一样。

路?

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

h**o
发帖数: 548
140
贴一个多子的代码。请指正
int LP(Node* root, int& hroot){ //h: height
if(!root) { hroot = 0; return 0;}
int max_hchild1 = INT_MIN, max_hchild2 = INT_MIN, maxlen = INT_MIN;
int length;
Node* cur_child = root->children;
while(cur_child){
maxlen = max(maxlen, LP(cur_child, hchild));//找child中最长path长.
if (hchild>=maxlen2){ //从child中找两个最长height,其中maxlen1>=
maxlen2
if (hchild>=maxlen1) { maxlen2 =maxlen1; maxlen1 = hchild; }
else maxlen2 = hchild;
}
cur_child = cur_child->next;
}
hroot= max(max_hchild1, max_hchild2)+1;
return max(maxlen, max_hchild1+max_hchild2+2);
}
相关主题
A家,link all node in the same lev生成树
一个老题binary tree找 lowest common ancestor 的code (请教G题,把binary tree里面的sibling节点连接起来
讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径fb电话面试
进入JobHunting版参与讨论
w******g
发帖数: 189
141

路?
请问第一题你是直接实现一个heap吗?还是用std::multiset?但是std::multiset在内
部是用binary search tree实现的哦。

【在 s********s 的大作中提到】
: 前天收到hr的邮件通知被拒了,奉上面经攒点人品吧
: 这是第二轮面试,共两个人,第一个是中国人吧,然后先示扯了扯之前做过的东西,然
: 后开始做题,让merge k 个 sorted list,用heap做了。
: 第二个上来应该是美国人了,一个manager,直接开始做题,让找一棵树(不一定是二叉
: 树)里面的longest path,没什么很好的思路,我说了一个找出所有节点对应的子树中的
: longest path然后比较这些得出global的最长,感觉回答的不好。大家有没有好的思路?
: 问hr要feedback说是我写的code效率不高,应该是挂在第二个人上了。哎。move on吧
: 。顺便请教一下大家两个困扰我挺久的问题:
: (1) 我是在加拿大读研,明年毕业,我之前是有想先找个实习什么的,觉得有个实习经
: 验找full time会容易些,但是如果明年暑假去实习,找full time的工作又有点问题,

s********x
发帖数: 914
142
那我写一下吧
public static Node mergeKSortedLists(Node[] l) {
// heapify: Make it a heap: Trickling Down in Place: start at node n
/2-1, the rightmost node with children
// O(n)
for (int i = (l.length / 2 - 1); i >= 0; i--)
trickleDown(l, i, l.length);

int heapSize = l.length; // size of the heap

// use an extra dummy node as the head
Node dummy = new Node();
Node pre = dummy;

while (heapSize > 0) {
Node heapRoot = l[0];
l[0] = l[0].getNext();
pre.setNext(heapRoot);
pre = heapRoot;

if (l[0] == null) { // empty list found, remove current list
from heap
removeHeapRoot(l, heapSize--);
}
else {
trickleDown(l, 0, heapSize); // heap root is changed to l[0]
.next
}
}

return dummy.getNext();
}
private static Node removeHeapRoot(Node[] heapArray, int size){
Node root = heapArray[0];
heapArray[0] = heapArray[--size]; // last element is heapArray[size
- 1]
trickleDown(heapArray, 0, size);
return root;
}
private static void trickleDown(Node[] l, int i, int size) {
// the last element is a[size-1] and its parent is a[size/2-1]
while (i < size / 2) {
int leftChild = 2 * i + 1;
int rightChild = leftChild + 1;
int smallerChild;
if (rightChild < size // rightChild exists?
&& l[leftChild].getValue() > l[rightChild].getValue())
smallerChild = rightChild;
else
smallerChild = leftChild;
if (l[i].getValue() <= l[smallerChild].getValue())
break;
swap(l, i, smallerChild);
i = smallerChild;
}
}

【在 w******g 的大作中提到】
:
: 路?
: 请问第一题你是直接实现一个heap吗?还是用std::multiset?但是std::multiset在内
: 部是用binary search tree实现的哦。

w******g
发帖数: 189
143
多谢。我是问遇到merge k 个 sorted list这道题,一共就15到20分钟时间,真的够时
间先写一个heap再写主程序么?
s********x
发帖数: 914
144
trickleDown 和 removeHeapRoot 可以不用实现,先空在那里。
本来就是可以写pseudo code的。所以主要代码也就25行。

【在 w******g 的大作中提到】
: 多谢。我是问遇到merge k 个 sorted list这道题,一共就15到20分钟时间,真的够时
: 间先写一个heap再写主程序么?

c********p
发帖数: 1969
145
mark
1 (共1页)
进入JobHunting版参与讨论
相关主题
狗狗家onsite面经一个老题binary tree找 lowest common ancestor 的code (请教
感觉Binary Tree Postorder Traversal的iterative是三种traversal中最难的讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
G的一道考题生成树
Tree Question: Longest path from root to a leafG题,把binary tree里面的sibling节点连接起来
求教google 电面 answerfb电话面试
一道面试题二叉树最长路径 用 level order travel 做?
这个check whether a binary tree is a BST 问题今天面试惨败,分享面经
A家,link all node in the same lev为什么quicksort会比heapsort快?
相关话题的讨论汇总
话题: int话题: node话题: root