问题:
从二叉树节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫做A到B的距离。
基本思路:
一个以h为头的树上,最大的距离只可能来自以下三种情况:
h左子树上的最大距离
h右子树上的最大距离
h左子树上离h.left最远的距离+1+h右子树上离h.right最远的距离
三个值中的最大值就是整棵h树中最远的距离
def maxDistance(root):
return process(root)[0]
def process(root):
#['最大距离','树的高度']
if root == None:
return [0,0]
leftData = process(root.left)
rightData = process(root.right)
height = max(leftData[1],rightData[1]) + 1
maxDistance = max(max(leftData[0],rightData[0]),leftData[1] + rightData[1] +1)
return [maxDistance,height]