二叉树的直径,即二叉树的节点之间最大距离

问题:如题,求解树的直径,即树中两个节点的最长路径距离,该路径可能经过根节点,也可能不经过根节点

该题也是leetcode上的题,代码如下。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int res = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        if(root == null)
            return 0;
        getHeight(root);
        return res;
    }

    public int getHeight(TreeNode node){
        if(node == null)
            return 0;

        int left = getHeight(node.left);
        int right = getHeight(node.right);

        res = Math.max(res, left+right);
        return 1+Math.max(left, right);
    }
}
### PTA 二叉树直径 解题思路和方法 #### 定义与背景 在处理PTA平台上的二叉树直径问题时,核心在于理解和计算二叉树最大距离。该最大距离定义为任意两个节点之间的最长路径长度,这条路径不一定通过根节点。 #### 计算原理 为了高效地解决这个问题,可以采用深度优先遍历的方法来获取每个子树的高度,并利用这些高度信息来更新当前已知的最大直径。具体来说,在访问每一个节点的过程中,不仅要记录左子树和右子树各自的最大高度差作为潜在的新直径候选者,还要继续向下传递左右孩子的实际高度给父节点用于后续比较[^1]。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def diameterOfBinaryTree(root: TreeNode) -> int: max_diameter = 0 def depth(node): nonlocal max_diameter if not node: return 0 # 获取左右子树的高度 L = depth(node.left) R = depth(node.right) # 更新最大直径 max_diameter = max(max_diameter, L + R) # 返回当前节点到叶子结点的距离 return max(L, R) + 1 depth(root) return max_diameter ``` 此代码片段展示了如何使用Python实现上述逻辑。`diameterOfBinaryTree` 函数接收一个 `TreeNode` 类型的对象作为参数并返回整数类型的直径值。内部辅助函数 `depth()` 负责递归地探索整个树结构的同时维护全局变量 `max_diameter` 来保存最终的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值