在叶子的二进制树深度

时间:2015-05-05 04:51:34

标签: python tree depth-first-search depth tree-traversal

我正在从网站上解决以下问题:"编写一个函数来查看二叉树是否超级平衡" (我们刚刚制作的新树属性)。 一棵树是超平衡的"如果任何两个叶节点的深度之间的差异不大于1。"

网站检查两个节点之间深度差异的方法是进行深度优先搜索,然后将每个访问节点的深度附加到名为depths的列表中,只要深度不在列表中:< / p>

        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个不同的叶子深度是否超过一个是不够的?为什么两次检查都有用?

来源:InterviewCake.com

引用的代码/问题

1 个答案:

答案 0 :(得分:1)

你需要同时检查两种......

第一个显然是不够的,因为你可以len(depths)==2以及两个>1之间的差异。

第二个条件,正如它所写的那样,只有在len(depth)正好2时才有效。 你可能只有后一个条件,但是你需要迭代depth列表中的所有项目。

所以基本上它的设计方式尽可能高效。您可能会认为这是过度优化的情况,因为depths列表的长度永远不会大于3,这也是此检查将执行的最大数量。

我会使用像max(depths) - min(depths) > 1这样的东西,它更具可读性和直观性,对性能的影响可以忽略不计。