具有给定级别的节点的二叉树数量

时间:2010-05-17 22:01:25

标签: c++ data-structures binary-tree

我需要编写一个程序来计算二进制中给定的某个级别的节点数 树。

我的意思是< numberofnodes(int level){}>

我尝试写它没有任何成功,因为我不知道怎么达到某个水平然后去 计算节点数。

6 个答案:

答案 0 :(得分:1)

使用仅递减到某个级别的递归函数来执行此操作。

答案 1 :(得分:0)

嗯,有很多方法可以做到这一点。最好的是拥有一个单维数组,可以跟踪每个级别添加/删除的节点数。考虑到您的要求是最简单的方法。

但是,如果仅提供二叉树,则必须遍历并转到那么多级别并计算节点,我没有看到任何其他选择。

要达到某个级别,您通常需要一个名为“current_depth”的变量,它将跟踪您所处的级别。一旦达到您感兴趣的级别并且节点被访问一次(通常是为了遍历就足够了)你可以增加你的计数。希望这有帮助。

答案 2 :(得分:0)

我假设您的二叉树不一定完整(即,并非每个节点都有两个或零个孩子,或者这变得微不足道)。我还假设您应该只计算某个级别的节点,而不是那个级别或更深的节点。

有许多方法可以解决您的问题,但您可以将其视为图搜索问题 - 您将获得一个起始节点(树的根),一种遍历边的方法(子链接) )和标准 - 距离根部一定距离。

此时您可能已经学习了图搜索算法 - 哪种算法听起来很适合您的任务?

答案 3 :(得分:0)

一般而言:
递归。
在递归的每次迭代中,您需要以某种方式测量您所处的级别,因此要知道您需要超出树的距离超出现在的位置。
递归部分:

  1. 你有什么基础案例?在什么条件下你说“好的,有时间停止递归”?
  2. 如何在没有全局计数的情况下计算递归中的某些内容?

答案 4 :(得分:0)

我认为最简单的方法是使用累加器跟踪树的递归性质,以跟踪当前的级别(或者可能是剩余级别的数量)。

该函数的非递归分支是当您达到相关级别时。此时,您只需返回1(因为您在该级别找到了一个节点)。

递归分支,简单地计算从左右递归调用返回的该级别的节点数。

答案 5 :(得分:0)

这是伪代码,假设根目录为0级

int count(x,currentLevel,desiredLevel)
    if currentLevel = desiredLevel
        return 1
    left = 0
    right = 0
    if x.left != null
        left = count(x.left, currentLevel+1, desiredLevel
    if x.right != null
        right = count(x.right, currentLevel+1, desiredLevel
    return left + right

因此,要获得级别3的节点数,请调用

count(root,0,3)