用递归算法求取二叉树每层结点的个数,从而求取二叉树的宽度
时间: 2023-05-26 14:04:06 浏览: 93
首先,我们可以先求出二叉树的深度,然后定义一个数组count,其长度为树的深度,count[i]表示第i+1层的结点个数,递归遍历二叉树,将每个结点所在层数的count值加1。最后返回count数组即可。
具体代码如下:
```
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def get_depth(root):
if not root:
return 0
else:
left_depth = get_depth(root.left)
right_depth = get_depth(root.right)
return max(left_depth, right_depth) + 1
def get_width(root):
depth = get_depth(root)
count = [0] * depth
get_count(root, 0, count)
return max(count)
def get_count(node, level, count):
if node:
count[level] += 1
get_count(node.left, level + 1, count)
get_count(node.right, level + 1, count)
```
我们可以定义一个二叉树进行测试:
```
root = Node(1, Node(2, Node(4), Node(5)), Node(3, Node(6, Node(8)), Node(7)))
print(get_width(root)) # 输出3,即第3层有最多的结点
```
运行结果为3,符合预期。
阅读全文