计算二叉树中每个级别的节点数

时间:2018-04-18 21:14:23

标签: python python-3.x tree binary-tree tree-traversal

我现在一直在寻找,但却找不到与我的问题类似的东西。也许我只是没有正确搜索。无论如何,这是我的考试复习中的一个问题。给定二叉树,我需要输出一个列表,使列表中的每个项目都是项目列表索引中二叉树中某个级别上的节点数。我的意思是,lst = [1,2,1]和第0个索引是树中的第0级,1是该级别中有多少个节点。 lst [1]将表示级别1的二叉树中的节点(2)的数量。不保证树是平衡的。我们只接受过预订,顺序和后序遍历,我不知道它们在这个问题中会有用。我不是要求具体的代码,只是想知道如何解决这个问题或者背后的逻辑。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

只要您只对每个节点计数一次,搜索顺序就不重要了。具有递归的深度优先搜索解决方案将是:

  • 创建地图counters以存储每个级别的计数器。例如。 counters[i]是到目前为止在级别i找到的节点数。我们假设0级是根。
  • 定义递归函数count_subtree(node, level):递增counters[level]一次。然后,对于给定节点的每个子节点,调用count_subtree(child, level + 1)(孩子处于更深层次)。
  • 调用count_subtree(root_node, 0)从根开始计算。这将导致count_subtree在每个节点上只运行一次,因为每个节点只有一个父节点,因此counters[level]每个节点将增加一次。叶节点是基本情况(没有子节点来调用递归函数)。
  • 根据计数器的值构建最终列表,按其按键升序排序。

这适用于任何类型的树,而不仅仅是二进制树。运行时间为O(树中的节点数)。旁注:深度优先搜索解决方案比并行处理器或机器更容易划分和运行,而不是类似的广度优先搜索解决方案。