[ 力扣活动0310 ] 543. 二叉树的直径
Posted remly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ 力扣活动0310 ] 543. 二叉树的直径相关的知识,希望对你有一定的参考价值。
<>
题目描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1 / 2 3 / 4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
解题思路
我的思路
要使两个结点路径长度最长,只需要求出每个结点左边的边数 + 右边的边数,迭代出最大值即可。
简单说就是从左边最远处走向右边最远处即为路径最长。
但这样会存在一个问题,每一个结点都要求边数,会有大量的重复运算,该如何解决?
![技术图片](/img/jia.gif)
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def diameterOfBinaryTree(self, root): """ :type root: TreeNode :rtype: int """ def layers(node): if not node: return 0 return 1+max(layers(node.left),layers(node.right)) if not root: return 0 # return layers(root.right) stack = [root] ret = -1 while len(stack): node = stack.pop() left , right = 0,0 if node.left: left = layers(node.left) stack.append(node.left) if node.right: right = layers(node.right) stack.append(node.right) if left+right > ret: ret = left+right return ret
总结
以上是关于[ 力扣活动0310 ] 543. 二叉树的直径的主要内容,如果未能解决你的问题,请参考以下文章
精选力扣500题 第50题 LeetCode 543. 二叉树的直径c++详细题解
二叉树有关习题整理543二叉树的直径 606根据二叉树创建字符串 KY11二叉树遍历 - 牛客105从前序遍历与中序遍历构造二叉树