题目
从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500.
思路
如中节点4和节点2之间的距离为2,节点2和5之间的距离为3.
设二叉树的头节点为head,这棵树的节点间最大距离可从以下三种情况中得来,设有最大距离的节点为A和B:
1、A和B都在head的左子树上,即这棵树的节点间最大距离就是以head->left为根节点的二叉树的节点间最大距离,设为Lmax1;
2、A和B都在head的右子树上,这时,这棵树的节点间最大距离就是以head->right为根节点的二叉树的节点间最大距离,设为Rmax1;
3、A在左子树上,B在右子树上,设A距离head->left的距离为Lmax2,B距离head->right的距离为Rmax2,A和B之间的距离为Lmax2+Rmax2+1
最后取Lmax1、Rmax1和(Lmax2+Rmax2+1)的最大值即为返回结果。
因为涉及到重复的运算,这道题用递归来做。