我需要编写一个程序来计算二进制中给定的某个级别的节点数 树。
我的意思是< numberofnodes(int level){}>
我尝试写它没有任何成功,因为我不知道怎么达到某个水平然后去 计算节点数。
答案 0 :(得分:1)
使用仅递减到某个级别的递归函数来执行此操作。
答案 1 :(得分:0)
嗯,有很多方法可以做到这一点。最好的是拥有一个单维数组,可以跟踪每个级别添加/删除的节点数。考虑到您的要求是最简单的方法。
但是,如果仅提供二叉树,则必须遍历并转到那么多级别并计算节点,我没有看到任何其他选择。
要达到某个级别,您通常需要一个名为“current_depth”的变量,它将跟踪您所处的级别。一旦达到您感兴趣的级别并且节点被访问一次(通常是为了遍历就足够了)你可以增加你的计数。希望这有帮助。
答案 2 :(得分:0)
我假设您的二叉树不一定完整(即,并非每个节点都有两个或零个孩子,或者这变得微不足道)。我还假设您应该只计算某个级别的节点,而不是那个级别或更深的节点。
有许多方法可以解决您的问题,但您可以将其视为图搜索问题 - 您将获得一个起始节点(树的根),一种遍历边的方法(子链接) )和标准 - 距离根部一定距离。
此时您可能已经学习了图搜索算法 - 哪种算法听起来很适合您的任务?
答案 3 :(得分:0)
一般而言:
递归。
在递归的每次迭代中,您需要以某种方式测量您所处的级别,因此要知道您需要超出树的距离超出现在的位置。
递归部分:
答案 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)