一棵树的直径

时间:2013-11-28 13:07:40

标签: c++ algorithm tree

我正在做interviewstreet.com的样本测试。它有3个问题,这些是公开的。所以我认为讨论这些问题没什么坏处。

我的问题是

问题2/3(树的直径) 树的直径是树中两个叶之间最长路径上的节点数。下图显示了一个直径为9的树,形成最长路径末端的叶子是阴影的(请注意,每个长度为9的树中有多个路径,但没有超过九个节点的路径)。

tree

请注意,树T的直径是以下数量中的最大值:

  • T的左子树的直径
  • T右子树的直径
  • 穿过T
  • 根的叶子之间的最长路径

给定树的根节点,返回树的直径

示例测试案例:

输入#00:考虑树:

tree2

输出#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个测试用例,但其中有两个是错误的。我找不到我错过的案例。我真的不认为这是一个基本情况,所以我错过了什么?

1 个答案:

答案 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