给你一颗二叉树T,找直径。
假设直径的起点和终点是a和b。a和b,要么是父子关系,要么是费父子关系。如果他们是父子关系,譬如说,a是b的父亲,那么b就是以a为根并且距离a最远的叶子。如果a和b不是父子关系,令他们的公共祖先为p,a和b分别是p的两个分支里距离p最远的两个叶子。
换句话来说,我们最后要求的东西,都跟一个东西有关,那就是以某个节点为根,并且该节点的两个分支里最远的那2个叶子。
形式化地说,设fL(x)为以x为根,并且处于x的左分支的最深的叶子的高度。设fR(x)为以x为根,并且处于x的右分支的最深的叶子的高度。
那么,对于二叉树T的直径,遍历每个节点x:
max {fL(x),fR(x),fL(x) + fR(x)| for x in T}
而fL和fR 的计算过程是递归的。
要么就是fL(T)或者fR(T),要么就是f