c语言编写数据结构程序题,实现二叉树中所有结点的左、右子树相互交换,给出详细的思路和完整代码
时间: 2024-12-11 16:24:49 浏览: 40
要实现二叉树中所有节点的左右子树相互交换,可以按照以下步骤进行:
1. 定义二叉树结构,包括指向左孩子的指针(`left`)和指向右孩子的指针(`right`)。
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
2. 创建一个辅助函数来交换两个节点的左右子树。这个函数接受当前节点作为参数,递归地处理其左右子树。
```c
void swapChildren(TreeNode* node) {
if (node != NULL) {
TreeNode* temp = node->left;
node->left = node->right;
node->right = temp;
// 递归调用,交换左子树和右子树
swapChildren(node->left);
swapChildren(node->right);
}
}
```
3. 在主函数中创建二叉树实例,调用`swapChildren`函数进行交换。
```c
int main() {
// 创建二叉树示例
TreeNode* root = ...; // 初始化根节点
// 执行交换操作
swapChildren(root);
// 检查并打印交换后的二叉树
inorderTraversal(root); // 自定义的中序遍历函数用于查看结果
return 0;
}
```
这里假设已经有一个`inorderTraversal`函数来执行中序遍历,以验证节点的左右子树是否已正确交换。
阅读全文