统计二叉树中度为2的结点数代码
时间: 2024-10-25 17:11:33 浏览: 34
统计二叉树中度为2的节点数,通常需要遍历整个二叉树。这里提供一个简单的Python示例,假设我们有一个二叉树的节点类`TreeNode`,它有一个`left`和`right`属性分别表示左孩子和右孩子:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_degree_two_nodes(root):
if root is None:
return 0
degree_two_count = 0
stack = [(root, 0)] # 使用栈来辅助广度优先搜索
while stack:
node, depth = stack.pop()
# 如果当前节点是叶子节点(深度为1),它的度就是0,不是2
if depth == 1 and (node.left is None and node.right is None):
continue
# 当前节点的度如果是2,增加计数
if depth == 1 and (node.left and not node.right) or \
(not node.left and node.right):
degree_two_count += 1
# 添加子节点到栈中继续遍历
if node.left:
stack.append((node.left, depth + 1))
if node.right:
stack.append((node.right, depth + 1))
return degree_two_count
```
这个代码首先初始化一个栈并把根节点放入其中,然后进入一个循环,每次从栈顶取出一个节点和其深度。如果节点是叶子节点(深度为1),直接跳过;如果节点的深度为1并且只有一个子节点,那么这个节点的度是2,增加计数。最后返回度为2的节点总数。
阅读全文