本文章详细讲解了在C++中实现二叉树左右子树节点交换的方法与技巧,并探讨其应用场景和注意事项。
二叉树的左右子树交换(C++):提供完整可运行代码。
这段文字要求我提供的内容是关于如何用C++编写一段可以实现二叉树左右子树互换功能的程序,并且需要给出完整的、可以直接编译和执行的代码。下面是一个简单的示例,展示了如何在C++中交换一个给定节点的左子树与右子树:
```cpp
#include
using namespace std;
// 定义二叉树结点结构体
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void swapChildren(TreeNode* node);
int main() {
// 创建示例的二叉树,例如:
// 1
// / \
// 2 3
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
cout << 交换前:\n;
swapChildren(root); // 调用函数进行子树的互换
}
// 定义递归函数,用于交换每个节点的左右孩子结点。
void swapChildren(TreeNode* node) {
if (node == NULL)
return;
TreeNode *temp = node->left; // 存储左孩子的引用
node->left = node->right; // 将右子树移到左边
node->right = temp; // 将原来的左孩子放到右边
swapChildren(node->left); // 对新的左子节点递归调用函数,进行进一步的交换。
swapChildren(node->right); // 同样对新生成的右子节点执行同样的操作
}
```
上述代码中定义了一个二叉树结构体`TreeNode`和一个用于左右孩子结点互换的函数`swapChildren()`。主程序创建了具有三个节点的小型示例树,并调用该交换功能。
请注意,这个例子中的实现是递归地进行所有子节点的左、右孩子的互换操作,适用于任何大小或形状的二叉树结构。