【问题标题】:Binary tree number of nodes with a given level给定级别的二叉树节点数
【发布时间】:2010-05-17 22:01:24
【问题描述】:

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

我的意思是

我尝试写它没有任何成功,因为我不知道如何达到一定的水平然后去 计算节点数。

【问题讨论】:

  • 这是作业吗?到目前为止,您尝试过什么?
  • @Johnsyweb - 这听起来有点像我的作业
  • 如果这是家庭作业,请标记它。你试过做什么?
  • @sadatwins,你知道如何计算二叉树中的所有节点吗?如果是这样,您可以通过一些额外的跟踪信息将其扩展到这个问题。如果没有,您可能应该从学习如何计算二叉树中的节点开始。
  • @Peter, @webdestroya:我不认为真的有明确的共识(见Etiquette on retagging questions as homework)。恕我直言,显然看起来像家庭作业的问题也可能被归类,如果确实是错误的,OP 可以随时回滚。

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


【解决方案1】:

使用只下降到某个级别的递归函数。

【讨论】:

  • 我认为 OP 要求计数 from 某个级别,而不是 to 某个级别。
  • 我认为 OP 要求在 某个级别进行计数,但谁知道呢。
【解决方案2】:

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

但是,如果只提供二叉树,您将不得不遍历并进入那么多级别并计算节点,我没有看到任何其他选择。

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

【讨论】:

【解决方案3】:

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

有很多方法可以按照您的要求进行操作,但您可以将其视为图形搜索问题 - 给您一个起始节点(树的根),一种遍历边的方法(子链接),以及一个标准 - 与根的一定距离。

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

【讨论】:

    【解决方案4】:

    一般来说:
    递归。
    在递归的每次迭代中,您需要以某种方式测量您所处的级别,因此要知道您需要在树的下方多远才能超出您现在的位置。
    递归部分:

    1. 您的基本情况是什么?在什么情况下你会说“好的,是时候停止递归了”?
    2. 如何在没有任何全局计数的情况下在递归中计数?

    【讨论】:

      【解决方案5】:

      我认为最简单的方法是简单地使用累加器遵循树的递归特性来跟踪当前级别(或者可能是剩余的级别数)。

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

      递归分支,简单地将左右递归调用返回的该级别的节点数相加。

      【讨论】:

        【解决方案6】:

        这是伪代码,假设根的级别为 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-04
          • 2021-04-28
          • 1970-01-01
          • 1970-01-01
          • 2020-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多