已知二叉树采用二叉链表存储结构,编写一个算法交换二叉树所有左、右子树的位置,即结点的左子树变为结点的右子树,右子树变为左子树。
时间: 2023-04-22 08:01:48 浏览: 123
算法步骤:
1. 如果二叉树为空,直接返回。
2. 如果二叉树不为空,交换当前结点的左右子树。
3. 递归交换当前结点的左子树和右子树。
代码实现:
```
void swapTree(TreeNode* root) {
if (root == nullptr) {
return;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
swapTree(root->left);
swapTree(root->right);
}
```
相关问题
已知二叉树采用二叉链表存储结构,编写一个算法交换二叉树所有左、右子树的位置,即结点的左子树变为结点的右子树,右子树变为左子树
这段内容描述了二叉树的存储结构和交换二叉树中某两个节点的位置。具体来说,已知二叉树采用二叉链表存储,编写了一个算法来交换二叉树中所有节点的左、右子树位置,即将左子树变为右子树,右子树变为左子树。最后得到的左子树变为原二叉树的右子树,右子树变为原二叉树的左子树。
用c语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换
好的,您所提出的问题是:如何用c语言编写已知二叉树采用二叉链表存储结构,设计一个算法,使二叉树中所有结点的左右子树相互交换。
以下是该问题的算法实现:
```
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
void swap(struct TreeNode* root) {
if (root == NULL) return;
struct TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
swap(root->left);
swap(root->right);
}
```
解释:从根节点开始遍历每个节点,对于每个节点,交换其左右子树。然后递归地对其左右子节点执行相同的操作。最终,整棵二叉树中的每个节点的左右子树都被交换。