叶子处的二叉树深度
Binary tree depth at leaves
我正在解决网站上的以下问题:"Write a function to see if a binary tree is "superbalanced"(我们刚刚制作的新树 属性)。
如果任意两个叶节点的深度之差不大于 1,则一棵树是 "superbalanced"。"
网站检查两个节点之间深度差异的方式是进行深度优先搜索,然后将访问过的每个节点的深度附加到称为深度的列表中,只要该深度不在列表中即可:
if depth not in depths:
depths.append(depth)
# two ways we might now have an unbalanced tree:
# 1) more than 2 different leaf depths
# 2) 2 leaf depths that are more than 1 apart
if (len(depths) > 2) or \
(len(depths) == 2 and abs(depths[0] - depths[1]) > 1):
return False
我不明白的是,为什么我们必须检查两种方式?仅仅检查条件是否有超过 2 个不同的叶深度或 2 个不同的叶深度相距超过 1 个是否足够?为什么同时进行这两项检查很有用?
Code/Question 引用自 source:InterviewCake.com
你需要两张支票,有点...
第一个显然不够,因为你可以有 len(depths)==2
和两者之间的差异 >1
.
第二个条件,如其所写,只有在 len(depth)
正好是 2
时才有效。
你可能只有后一种情况,但你需要遍历 depth
列表中的所有项目。
所以基本上它的设计方式是尽可能高效。您可能会争辩说这是过度优化的情况,因为 depths
列表的长度永远不会大于 3
并且这也是此检查将执行的最大数量。
我会选择 max(depths) - min(depths) > 1
这样的东西,它更具可读性和直观性,对性能的影响可以忽略不计。
我正在解决网站上的以下问题:"Write a function to see if a binary tree is "superbalanced"(我们刚刚制作的新树 属性)。 如果任意两个叶节点的深度之差不大于 1,则一棵树是 "superbalanced"。"
网站检查两个节点之间深度差异的方式是进行深度优先搜索,然后将访问过的每个节点的深度附加到称为深度的列表中,只要该深度不在列表中即可:
if depth not in depths:
depths.append(depth)
# two ways we might now have an unbalanced tree:
# 1) more than 2 different leaf depths
# 2) 2 leaf depths that are more than 1 apart
if (len(depths) > 2) or \
(len(depths) == 2 and abs(depths[0] - depths[1]) > 1):
return False
我不明白的是,为什么我们必须检查两种方式?仅仅检查条件是否有超过 2 个不同的叶深度或 2 个不同的叶深度相距超过 1 个是否足够?为什么同时进行这两项检查很有用?
Code/Question 引用自 source:InterviewCake.com
你需要两张支票,有点...
第一个显然不够,因为你可以有 len(depths)==2
和两者之间的差异 >1
.
第二个条件,如其所写,只有在 len(depth)
正好是 2
时才有效。
你可能只有后一种情况,但你需要遍历 depth
列表中的所有项目。
所以基本上它的设计方式是尽可能高效。您可能会争辩说这是过度优化的情况,因为 depths
列表的长度永远不会大于 3
并且这也是此检查将执行的最大数量。
我会选择 max(depths) - min(depths) > 1
这样的东西,它更具可读性和直观性,对性能的影响可以忽略不计。