543. Diameter of Binary Tree(二叉树的最长直径)

该博客介绍如何求解给定二叉树的直径,即树中任意两个节点间的最长路径长度。通过后序遍历,针对每个节点计算其最大边长,并利用全局变量maxdia记录最长直径。
摘要由CSDN通过智能技术生成

给定二叉树,您需要计算树直径的长度。二叉树的直径是一棵树中任何两个节点之间的最长路径的长度。此路径可能会也可能不会通过根。

思路:
要计算二叉树的最长直径,肯定需要遍历树,而最长直径肯定有一个相对的root节点,所以可以后序遍历了,每到达一个节点就要计算一下maxdia,最长直径是看边数的(5个node,那就是4),然后返回对于这个节点的最长边长(左右子树的最长值)。maxdia是一个全局变量。

code:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
   
private:
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树最长直径是指二叉树中任意两个节点之间最长路径的长度,也就是最长的一条路径。可以使用深度优先搜索算法(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` 方法来二叉树最长直径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值