算法1:
- 初始化一个计数器count=0,遍历二叉树的过程中统计度为1的结点个数;
- 对于当前结点node,如果node为叶子结点(左右子树均为空),则直接返回;
- 如果node的左子树为空,说明node只有一个右孩子,count++,然后继续遍历node的右子树;
- 如果node的右子树为空,说明node只有一个左孩子,count++,然后继续遍历node的左子树;
- 如果node既有左子树又有右子树,分别遍历node的左右子树,递归调用以上步骤。
算法2:
- 初始化一个计数器count=0和一个队列queue,将根结点node入队;
- 队列不为空时,循环执行以下步骤:
- 取出队首结点cur;
- 如果cur的左子树非空,将其左子树入队;
- 如果cur的右子树非空,将其右子树入队;
- 如果cur的度为1,说明cur只有一个孩子,count++;
- 返回count。
算法1的代码:
def count_degree_one(node):
if node is None:
return 0
# 如果node为叶子结点,直接返回0
if node.left is None and node.right is None:
return 0
# 初始化计数器count为0