题解:
本题用深度优先搜索
我们通过画图来找寻本题的思路;
容易分析得,本题需要两个dfs,一个是遍历左结点的子树,一个遍历右结点的子树;
如图所示,首先遍历左边的结点一直到根;
def dfs(node):
if not node:
return 0
dfs(node.left)
此时需要进行回溯,回溯到结点2;但是路径长度需要+1;因此代码更改如下所示:
def dfs(node):
if not node:
return 0
l = dfs(node.left)
return l + 1
同理,对右边结点的遍历也是上述的代码,即如下所示:
def dfs(node):
if not node:
return 0
r = dfs(node.right)
return r + 1
左右子树合在一起。计算以当前结点为根的最大深度代码如下所示:
def dfs(node):
if not node:
return 0
l = dfs(node.left)
r = dfs(node.right)
return max(l,r) + 1
因此最大路径为:L+R。
代码如下所示:
class Solution:
def diameterOfBinaryTree(self, root):
self.ans = 0
def dfs(node):
if not node:
return 0
L = dfs(node.left)
R = dfs(node.right)
self.ans = max(self.ans, L + R)
return max(L,R) + 1
dfs(root)
return self.ans
来源:CSDN
作者:chenyy__
链接:https://blog.csdn.net/cy_believ/article/details/104778606