博客
关于我
LeetCode 例题精讲 | 10 二叉树直径:二叉树遍历中的全局变量
阅读量:681 次
发布时间:2019-03-16

本文共 902 字,大约阅读时间需要 3 分钟。

在计算二叉树直径时,可以使用递归的方法,通过返回多个值来简化代码结构。以下是详细的步骤:

方法思路

  • 问题分析:二叉树的直径是指任意两个结点之间的路径长度的最大值。最长路径可能不经过根节点。
  • 子问题划分:计算每个子树的最大深度和最大直径。
  • 递归函数设计:递归函数返回两个值,分别表示子树的最大深度和最大直径。
  • 合并子问题结果:当前节点的最大深度是左右子树深度的最大值加1;当前节点的最大直径是左右子树的最大直径和左深度加右深度的最大值。
  • 解决代码

    def diameterOfBinaryTree(root):
    def traverse(node):
    if node is None:
    return (0, 0)
    left_depth, left_diam = traverse(node.left)
    right_depth, right_diam = traverse(node.right)
    depth = 1 + max(left_depth, right_depth)
    diam = max(left_diam, right_diam, left_depth + right_depth)
    return (depth, diam)
    if root is None:
    return 0
    _, diameter = traverse(root)
    return diameter

    代码解释

  • traverse函数:递归遍历二叉树,返回子树的最大深度和最大直径。
  • 递归终止条件:空节点返回深度和直径均为0。
  • 计算左、右子树结果:分别调用traverse函数获取左、右子树的深度和直径。
  • 当前节点深度:左右子树深度的最大值加1。
  • 当前节点直径:左右子树直径的最大值与左深度加右深度的最大值比较,取最大的作为当前节点的直径。
  • 主函数:调用traverse函数,返回整个树的直径。
  • 这种方法通过递归和返回多个值,简洁高效地解决了二叉树直径的问题。

    转载地址:http://gpqqz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现Linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现LinearSieve线性素数筛选算法 (附完整源码)
    查看>>
    Objective-C实现LinkedListNode链表节点类算法(附完整源码)
    查看>>
    Objective-C实现LinkedList链表算法(附完整源码)
    查看>>
    Objective-C实现local weighted learning局部加权学习算法(附完整源码)
    查看>>
    Objective-C实现logistic regression逻辑回归算法(附完整源码)
    查看>>
    Objective-C实现logistic sigmoid函数(附完整源码)
    查看>>
    Objective-C实现longest Common Substring最长公共子串算法(附完整源码)
    查看>>
    Objective-C实现longest increasing subsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现longestCommonSubsequence最长公共子序列算法(附完整源码)
    查看>>
    Objective-C实现LongestIncreasingSubsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现lorenz transformation 洛伦兹变换算法(附完整源码)
    查看>>
    Objective-C实现Lower-Upper Decomposition上下分解算法(附完整源码)
    查看>>
    Objective-C实现LowerCaseConversion小写转换算法(附完整源码)
    查看>>
    Objective-C实现lowest common ancestor最低共同祖先算法(附完整源码)
    查看>>
    Objective-C实现LRU 缓存算法(附完整源码)
    查看>>
    Objective-C实现LRU缓存(附完整源码)
    查看>>
    Objective-C实现LRU(least recently used)算法(附完整源码)
    查看>>
    Objective-C实现lstm prediction预测算法(附完整源码)
    查看>>
    Objective-C实现lucas数列算法(附完整源码)
    查看>>