【发布时间】:2021-06-19 14:37:36
【问题描述】:
我有一个代码可以找到树的直径。 根据我的理解,直径是 2 个叶节点之间最长路径中的节点数。
代码是:
def diameter(root):
if root is None:
return 0
lheight = height(root.left)
rheight = height(root.right)
ldiameter = diameter(root.left)
rdiameter = diameter(root.right)
return max(lheight + rheight + 1, max(ldiameter, rdiameter))
其中height是一个计算节点高度的函数。
但是,我觉得没有必要对diameter 函数进行递归调用,如下面的 sn-p 所示,因为它给出了相同的输出。
def diameter(root):
if root is None:
return 0
lheight = height(root.left)
rheight = height(root.right)
return lheight + rheight + 1
为什么在第一个代码中需要递归调用diameter?
可能我找不到lheight + rheight + 1小于max(ldiameter, rdiameter)的情况。
def height(node):
if node is None:
return 0
return 1 + max(height(node.left), height(node.right))
【问题讨论】:
-
我想知道这两行需要什么:ldiameter = diameter(root.left) rdiameter = diameter(root.right)
-
height是如何定义的? -
添加了高度定义。
标签: python tree recursive-datastructures