二叉树的最长直径
时间: 2023-08-30 19:05:50 浏览: 164
二叉树的最长直径是指二叉树中任意两个节点之间最长路径的长度,也就是最长的一条路径。可以使用深度优先搜索算法(DFS)来求解。
具体做法如下:
1. 对于每个节点x,求出其左子树的深度L和右子树的深度R;
2. 计算以节点x为根节点的子树的最长直径为L+R;
3. 对于每个节点,比较其左子树的最长直径、右子树的最长直径和以该节点为根节点的子树的最长直径,取最大值即为二叉树的最长直径。
下面是一个 Python 实现的例子:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def __init__(self):
self.diameter = 0
def diameterOfBinaryTree(self, root: TreeNode) -> int:
self.getDepth(root)
return self.diameter
def getDepth(self, node: TreeNode) -> int:
if not node:
return 0
left_depth = self.getDepth(node.left)
right_depth = self.getDepth(node.right)
self.diameter = max(self.diameter, left_depth + right_depth)
return max(left_depth, right_depth) + 1
```
在上面的代码中,我们定义了一个 `Solution` 类,并实现了 `diameterOfBinaryTree` 和 `getDepth` 两个方法。其中,`diameterOfBinaryTree` 方法用于求解二叉树的最长直径,而 `getDepth` 方法用于求解二叉树中每个节点的深度。
在 `getDepth` 方法中,我们使用递归的方式求解每个节点的深度,并在递归过程中计算以该节点为根节点的子树的最长直径,并将其与当前最大直径比较取最大值。
最后,我们可以调用 `diameterOfBinaryTree` 方法来求解二叉树的最长直径。
阅读全文