交换二叉树的左右子树C语言
时间: 2024-09-21 22:12:40 浏览: 44
交换二叉树的左右子树是一种常见的二叉树操作,通常用于调整节点的结构,例如在某些排序算法中。在C语言中,我们可以定义一个简单的二叉树节点结构体,然后编写一个函数来完成这个任务。以下是实现的基本步骤:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 交换当前节点的左右子树
void swapLeftRight(TreeNode* node) {
if (node == NULL) return; // 非空指针才需要交换
TreeNode* temp = node->left; // 临时存储左子树
node->left = node->right; // 将右子树赋值给左子树
node->right = temp; // 将临时存储的左子树赋值给右子树
}
```
这个`swapLeftRight`函数接受一个指向二叉树节点的指针,如果该节点不为空,则会交换它的左右子节点。如果你想要递归地遍历整个二叉树并调用此函数,可以再添加一个辅助的遍历函数。
相关问题
交换二叉树的左右子树c语言
可以使用递归或迭代的方式交换二叉树的左右子树。具体实现方法如下:
递归方式:
void invertTree(struct TreeNode* root){
if(root == NULL){
return;
}
struct TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
invertTree(root->left);
invertTree(root->right);
}
迭代方式:
void invertTree(struct TreeNode* root){
if(root == NULL){
return;
}
struct TreeNode* temp;
struct TreeNode** stack = (struct TreeNode**)malloc(sizeof(struct TreeNode*)*100);
int top = -1;
stack[++top] = root;
while(top >= ){
struct TreeNode* node = stack[top--];
temp = node->left;
node->left = node->right;
node->right = temp;
if(node->left != NULL){
stack[++top] = node->left;
}
if(node->right != NULL){
stack[++top] = node->right;
}
}
free(stack);
}
交换二叉树的左右子树C语言完整代码
在C语言中,交换二叉树的左右子树通常涉及到结构体定义、函数实现以及递归遍历节点的过程。首先,我们需要定义一个表示二叉树节点的结构:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode *left; // 左子节点指针
struct TreeNode *right; // 右子节点指针
} TreeNode;
```
接下来是一个用于交换左右子树的辅助函数,它接收一个指向当前节点的指针作为输入,并递归地处理左子树和右子树:
```c
void swapTreeNodes(TreeNode **node) {
if (*node != NULL) { // 非空节点
TreeNode *temp = (*node)->left; // 保存左子节点
(*node)->left = (*node)->right; // 交换左右子节点
(*node)->right = temp; // 更新右子节点为之前保存的左子节点
// 递归处理左子树和右子树
swapTreeNodes(&(*node)->left);
swapTreeNodes(&(*node)->right);
}
}
```
最后,你可以通过创建一个二叉树实例并调用这个函数来进行整个树的左右子树交换:
```c
// 示例主函数
int main() {
TreeNode *root = // 初始化你的二叉树
swapTreeNodes(&root); // 调用函数交换根节点的左右子树
// 其他树操作...
return 0;
}
```
阅读全文