题目
给定二叉树,求取该二叉树多有节点中距离最远的结点相隔的距离
分析
以root为根节点的树上,最大距离求取
情况一:root的左子树上的最大距离
情况二:root的右子树上的最大距离
情况三:root左子树上距离root结点最远的距离,加上root自身这个节点,再加上root右子树上距离root右孩子最远的距离
三个值中最大的即为所求
思路
1、整个过程为后序遍历,在二叉树的每棵子树上指向步骤2
2、假设子树头root,处理root的左子树,得到两个信息,左子树上的最大距离记为LMax1,左子树上距离root左孩子的最远距离记为LMax2。处理root右子树得到右子树上的最大距离记为RMax1,距离root右孩子的最远距离记为RMax2。那么跨root结点情况下的最大距离为LMax2+1+RMax2,这个值与LMax1和RMax1比较,最大值即为所求
3、LMax2+1就是root左子树上距离root最远的点到root的距离
RMax2+1就是root右子树上距离root最远的点到root的距离
两者中最大的一个作为root树上距离root最远的距离返回
4、用返回长度为2的数组的方式,可以做到返回两个值
代码实现
/**
* 从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当
* 到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。
* 给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500