求最大距离的方法从左右子树的高度入手。
从根结点看,左子树上距根结点最远的结点到根结点的距离应为左子树的树高+1,右子树同理,那么左子树上存在至少一个结点往根这条路径加上根到右子树上至少某一个结点的距离为左子树高度+右子树高度+1;
但这并不一定就是所有跟离中最远的,比如可以假设某个子结点的左右树高都为h,而其父结到该子树的最远距离为h+1+1,但是这个子树的左右子树高都为h-1,那么以这个子结点为根的整个子树上的最远至少为2(h-1)+1;
而这个距离是有可能超过其父结点的最远距离的,所以这个方式计算最远距离需要计算所有的点。
二叉树类的问题基本都可以比较方便的使用递归或是通过递归找到代码量比较少的解决办法,再根据需要去解决速度的内存使用问题,或是转变为非递归方式。