题目描述
从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。例如下图二叉树的节点间最大距离为节点5到节点7的距离为5。
思路如下
一个以h为根节点的树上,最大的距离只可能来自以下三种情况:
1)h左子树上的最大距离
2)h右子树上的最大距离
3)h左子树上离h.left最远的距离+h右子树上离h.right最远的距离+1
python代码如下
#定义二叉树的节点
class TreeNode:
def __init__(self,x):
self.val=x
self.left=None
self.right=None
#求解节点间的最大距离
class Solution:
def maxDistance(self,root):
def maxDisAndDepth(root):
if not root:
return [0,0]#存储当前节点[最大距离,树的高度]
leftData=maxDisAndDepth(root.left)#访问左子树
rightData=maxDisAndDepth(root.right)#访问右子树
height=max(leftData[1],rightData[1])+1#计算当前节点的高度
maxDis=max(max(leftData[0],rightData[0]),leftData[1]+rightData[1]+1)#计算当前节点的最大距离
return [maxDis,height]
return maxDisAndDepth(root)[0]
if __name__=="__main__":
t1=TreeNode(1)
t2=TreeNode(4)
t3=TreeNode(3)
t4=TreeNode(5)
t5=TreeNode(7)
t1.left=t2
t1.right=t3
t2.right=t4
t3.right=t5
s=Solution()
print(s.maxDistance(t1))