树的直径
Diameter of the tree
我有一个代码可以计算树的直径。
根据我的理解,直径是 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
函数进行递归调用,如下面的代码片段所示,因为它提供相同的输出。
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))
我有一个代码可以计算树的直径。 根据我的理解,直径是 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
函数进行递归调用,如下面的代码片段所示,因为它提供相同的输出。
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))