用c语言,编写求二叉树左右子树互换的递归算法
时间: 2023-01-11 15:55:36 浏览: 143
这是一个求二叉树左右子树互换的递归算法的示例:
```c
void swap_left_right(struct node* root) {
if (root == NULL) return; // 终止条件
// 交换左右子树
struct node* temp = root->left;
root->left = root->right;
root->right = temp;
// 递归地对左右子树进行交换
swap_left_right(root->left);
swap_left_right(root->right);
}
```
在这段代码中,`struct node` 是一个表示二叉树节点的结构体,其中 `left` 和 `right` 分别表示节点的左右子节点。
首先,我们检查当前节点是否为空,如果是,就终止递归。然后交换左右子树,最后对左右子树分别调用递归函数,完成交换。
注意,在这段代码中,我们使用了临时变量来交换左右子树。如果你想使用位运算来交换两个变量的值,可以使用以下代码:
```c
a = a ^ b;
b = a ^ b;
a = a ^ b;
```
希望这能帮到你!
相关问题
请用c语言编写求二叉树深度的递归算法
在C语言中,可以使用递归来计算二叉树的深度。这里是一个简单的递归函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 计算二叉树深度的辅助函数
int maxDepth(struct TreeNode* root) {
// 如果根节点为空,返回0
if (root == NULL) return 0;
// 否则分别计算左子树和右子树的深度,并取较大值加1作为当前的高度
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
// 返回最大深度
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
int main() {
// 创建一个简单的二叉树实例并测试这个函数
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
int depth = maxDepth(root);
printf("The maximum depth of the binary tree is %d\n", depth);
// 清理内存
free(root->left);
free(root->right);
free(root);
return 0;
}
```
在这个例子中,`maxDepth` 函数会一直递归地检查左右子树,直到找到空节点,然后返回当前层数。当处理完整个树后,最终的深度即为树的最大深度。
C语言交换二叉树的左右子树递归
可以回答这个问题。交换二叉树的左右子树可以通过递归实现。具体实现方式是,先交换当前节点的左右子节点,然后递归交换左右子节点的左右子节点。代码实现如下:
void invertTree(TreeNode* root) {
if (root == nullptr) {
return;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
invertTree(root->left);
invertTree(root->right);
}
阅读全文