《编程之美》给出了一种方法,但是它要为每个节点都保存一个最长左子树距离和最长右子树距离的字段。
我想到了另一种方法,就是为节点编码,根节点设为0,对于一个节点的左节点,它的编码是它的父亲节点的码后面加个0,对于一个节点的右节点,它的编码是它的父亲节点的码后面加个1,如果我们找到了叶子节点,就把为它编的码存在一个数组中。一次遍历完毕后,数组中就存在所有叶子节点的编码了,再将根节点的码也存在数组中。我们可以根据节点的码来求出两个节点间的距离。因为最大距离的两个节点一定是叶子节点或者叶子节点和根节点,因此只需比较存在数组中的码间的距离,就可以获得最大距离了。
汗,怎么每次说思路都说的糊里糊涂的。。。其实,只要画副图就明确了,自己画吧。。。
附上《编程之美》中的另一种解法