使用分治法解决, 假设树的根为root, 则树的直径对应的路径P有如下三种情况

 1. P在左子树中,

 2. P在右子树中,

 3. P经过了根root,此时P必然为Lmax --> root --> Rmax, Lmax为左子树中深度最大的节点; 等价于左子树高度+右子树高度+1

Diameter(N) = max{ Diameter(Left), Diameter(Right), Height(Left)+Height(Right)+1 }

T(n) = 2T(n/2) + f(n)

f(n)为计算第三种情况的时间, 我们可以先通过后序遍历计算出以每个节点的的高度,需要O(n), 此时f(n)=O(1),

根据master method, T(n) = O(n)

posted on 2012-07-27 10:14  ellusak  阅读(624)  评论(3编辑  收藏  举报