用递归的算法求取二叉树每层节点个数
时间: 2023-05-28 18:07:52 浏览: 110
递归算法计算二叉树中叶子节点的数目
以下是用递归的算法求取二叉树每层节点个数的Python代码:
```python
def countNodesByLevel(root, level, counts):
if root is None:
return
if level >= len(counts):
counts.append(0)
counts[level] += 1
countNodesByLevel(root.left, level + 1, counts)
countNodesByLevel(root.right, level + 1, counts)
def countNodes(root):
counts = []
countNodesByLevel(root, 0, counts)
return counts
```
这个算法定义了一个辅助函数`countNodesByLevel`,它需要三个参数:当前节点、当前层数和节点计数器列表。对于每一个非空节点,我们将其所在层的节点计数器加1,然后递归遍历它的左子树和右子树,同时将层数加1。在递归过程中,我们还需要判断当前层数是否已经超出了节点计数器列表的长度,如果是,则需要添加新的计数器。
最终,我们定义了另一个函数`countNodes`,它只需要一个参数:二叉树的根节点。它首先创建一个空的节点计数器列表,然后调用`countNodesByLevel`函数来填充这个列表。最后,它返回这个列表作为结果。
这个算法的时间复杂度是O(n),因为它需要遍历每一个节点一次。空间复杂度也是O(n),因为它需要存储每一层的节点计数器列表。
阅读全文