用c语言用递归的方法统计二叉树的结点个数,交换二叉树每个结点的左孩子和右孩子
时间: 2023-11-14 08:05:11 浏览: 39
统计二叉树结点个数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
struct TreeNode {
int val; // 节点值
struct TreeNode *left; // 左孩子指针
struct TreeNode *right; // 右孩子指针
};
// 统计二叉树结点个数的函数
int countNodes(struct TreeNode* root) {
if (root == NULL) { // 如果是空树,返回0
return 0;
}
// 否则,递归统计左子树和右子树的节点数,并加上根节点1
return countNodes(root->left) + countNodes(root->right) + 1;
}
int main() {
// 创建二叉树
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = 1;
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = NULL;
// 统计节点数并输出
int count = countNodes(root);
printf("二叉树节点个数为:%d\n", count);
return 0;
}
```
交换二叉树每个结点的左孩子和右孩子的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
struct TreeNode {
int val; // 节点值
struct TreeNode *left; // 左孩子指针
struct TreeNode *right; // 右孩子指针
};
// 交换二叉树每个节点的左孩子和右孩子的函数
void swapChild(struct TreeNode* root) {
if (root == NULL) { // 如果是空树,直接返回
return;
}
// 否则,递归交换左子树和右子树的节点
struct TreeNode *temp = root->left;
root->left = root->right;
root->right = temp;
swapChild(root->left);
swapChild(root->right);
}
int main() {
// 创建二叉树
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = 1;
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->val = 3;
root->right->left = NULL;
root->right->right = NULL;
// 输出交换前的二叉树
printf("交换前的二叉树:\n");
printf(" %d\n", root->val);
printf(" %d %d\n", root->left->val, root->right->val);
// 交换节点并输出交换后的二叉树
swapChild(root);
printf("交换后的二叉树:\n");
printf(" %d\n", root->val);
printf(" %d %d\n", root->left->val, root->right->val);
return 0;
}
```