编写算法交换二叉树的左右子树
时间: 2023-10-31 13:05:35 浏览: 153
可以使用递归的方式,对于每个节点,交换其左右子树即可。具体实现如下:
```
void invertBinaryTree(TreeNode* root) {
if (root == nullptr) {
return;
}
swap(root->left, root->right);
invertBinaryTree(root->left);
invertBinaryTree(root->right);
}
```
其中 `TreeNode` 是二叉树节点的定义,包括左右子节点指针。可以将这个函数作为类的静态成员方法,方便调用。
相关问题
用c++编写程序,设计算法实现二叉树左右子树互换
在C++中,我们可以创建一个简单的二叉树结构,并提供一个函数来交换每个节点的左右子树。这里是一个基本的设计:
首先,我们定义一个二叉树节点结构:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
然后,我们可以定义一个函数`swapLeftAndRight(TreeNode*& node)`来遍历并交换每个节点的左右子树:
```cpp
void swapLeftAndRight(TreeNode*& node) {
if (node != nullptr) {
TreeNode temp = *node;
node->left = node->right;
node->right = temp.left;
// 递归交换左子树和右子树
if (node->left != nullptr)
swapLeftAndRight(node->left);
if (node->right != nullptr)
swapLeftAndRight(node->right);
}
}
```
这个函数首先检查节点是否为空,如果不空就临时保存当前节点,然后交换其左右子树。接着对新的左右子树递归应用同样的操作。
使用这个函数,你可以像这样创建一个二叉树并交换其左右子树:
```cpp
int main() {
// 创建示例二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
// ... 更多节点
// 调用函数交换左右子树
swapLeftAndRight(root);
// 打印交换后的二叉树
// ...
return 0;
}
```
编写算法将二叉树的左右子树进行交换。
算法步骤:
1. 如果二叉树为空,则返回空。
2. 如果二叉树不为空,则交换当前节点的左右子树。
3. 递归交换当前节点的左子树。
4. 递归交换当前节点的右子树。
代码实现:
```
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);
}
```
阅读全文