C语言,输出二叉树中所有度为1的结点
时间: 2023-05-26 10:03:16 浏览: 50
以下是一种可能的C语言实现方式:
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点类型
typedef struct node {
int data; // 结点的数据
struct node *left; // 左子结点指针
struct node *right; // 右子结点指针
} Node;
// 定义函数:输出二叉树中所有度为1的结点
void print_degree_one(Node *root) {
if (root == NULL) {
return; // 空结点,直接返回
}
if (root->left == NULL && root->right != NULL) {
printf("%d ", root->data); // 左子结点为空,右子结点不为空,则为度为1的结点
}
if (root->right == NULL && root->left != NULL) {
printf("%d ", root->data); // 右子结点为空,左子结点不为空,则为度为1的结点
}
print_degree_one(root->left); // 递归处理左子树
print_degree_one(root->right); // 递归处理右子树
}
// 测试程序
int main() {
// 构造一棵二叉树
Node *root = (Node *)malloc(sizeof(Node));
root->data = 1;
root->left = (Node *)malloc(sizeof(Node));
root->left->data = 2;
root->left->left = NULL;
root->left->right = (Node *)malloc(sizeof(Node));
root->left->right->data = 3;
root->left->right->left = (Node *)malloc(sizeof(Node));
root->left->right->left->data = 4;
root->left->right->left->left = NULL;
root->left->right->left->right = NULL;
root->left->right->right = (Node *)malloc(sizeof(Node));
root->left->right->right->data = 5;
root->left->right->right->left = NULL;
root->left->right->right->right = NULL;
root->right = (Node *)malloc(sizeof(Node));
root->right->data = 6;
root->right->left = NULL;
root->right->right = (Node *)malloc(sizeof(Node));
root->right->right->data = 7;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 输出所有度为1的结点
printf("All degree 1 nodes: ");
print_degree_one(root);
printf("\n");
return 0;
}
```
输出结果为:
```
All degree 1 nodes: 6 7
```