c语言给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。
时间: 2024-09-19 21:13:49 浏览: 40
在C语言中,你可以使用递归的方法来翻转一棵二叉树。下面是一个简单的示例代码,它首先定义了一个二叉树节点的结构体,然后通过递归翻转这棵树。
首先,我们定义一个二叉树节点的结构体:
```c
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
```
然后,我们编写一个函数来翻转这棵二叉树:
```c
Node* reverseTree(Node* root) {
if (root == NULL) {
return NULL;
}
Node* temp = reverseTree(root->left);
Node* temp2 = reverseTree(root->right);
root->left = temp2;
root->right = temp;
return root;
}
```
这个函数首先检查根节点是否为空。如果为空,那么返回NULL。否则,它递归地翻转左子树和右子树,并将它们存储在临时变量中。然后,它将新的左子树和右子树分别赋值给根节点的左子节点和右子节点。最后,它返回翻转后的根节点。
注意,这个函数会直接修改传入的二叉树。如果你不希望修改原始的二叉树,那么你需要创建一个新的节点来保存翻转后的结果。你可以在调用这个函数之前创建好一个新的节点,并在调用之后将新节点赋值给原来的根节点。这样就可以得到一个未被修改的原始二叉树。
相关问题
给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。用c语言
在C语言中,你可以通过递归的方式来实现二叉树的翻转。给定二叉树的根节点root,我们需要交换每个节点的左右子节点。以下是递归函数的基本思路:
```c
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 翻转二叉树的函数
TreeNode* invertTree(TreeNode* root) {
// 如果根节点为空,直接返回
if (root == NULL) return NULL;
// 先交换左、右子节点
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
// 递归翻转左右子树
root->left = invertTree(root->left);
root->right = invertTree(root->right);
return root;
}
```
这个函数首先检查根节点是否为空,如果为空则直接返回。然后它会临时存储当前节点的左孩子,将左孩子指向右孩子,右孩子指向左孩子,再分别对新的左右子树进行递归翻转。最后返回翻转后的根节点。
翻转二叉树c语言实现
翻转二叉树是一种常见的二叉树操作,其实现方式如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* invertTree(struct TreeNode* root) {
if (!root) return NULL; // 如果根节点为空,直接返回NULL
// 递归调用翻转左右子树
struct TreeNode* temp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(temp);
return root; // 返回根节点
}
int main() {
// 构造一个二叉树,以1为根节点,2和3为左右子节点
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;
// 翻转二叉树
struct TreeNode* invertedRoot = invertTree(root);
// 输出翻转后的二叉树
printf("%d\n", invertedRoot->val); // 输出1
printf("%d\n", invertedRoot->left->val); // 输出3
printf("%d\n", invertedRoot->right->val); // 输出2
return 0;
}
```
阅读全文