我正在做interviewstreet.com的样本测试。它有3个问题,这些是公开的。所以我认为讨论这些问题没什么坏处。
我的问题是
问题2/3(树的直径) 树的直径是树中两个叶之间最长路径上的节点数。下图显示了一个直径为9的树,形成最长路径末端的叶子是阴影的(请注意,每个长度为9的树中有多个路径,但没有超过九个节点的路径)。
请注意,树T的直径是以下数量中的最大值:
给定树的根节点,返回树的直径
示例测试案例:
输入#00:考虑树:
输出#00: 5
说明: 树的直径是5
我在C ++中的答案是:
int traverse(node* r) {
if (r == NULL) { return 0;}
return max(traverse(r->left),traverse(r->right))+1;
}
int diameterOfTree(node * r) {
return traverse(r->left)+traverse(r->right)+1;
}
有14个测试用例,但其中有两个是错误的。我找不到我错过的案例。我真的不认为这是一个基本情况,所以我错过了什么?
答案 0 :(得分:4)
您可能没有树的直径通过其根。想象这棵树:
/ E - F - G - H - I
A - B - C - D
\ J - K - L - M
(抱歉丑陋的ASCII艺术)。这里的直径为I-H-G-F-E-D-J-K-L-M
。