《2》 编写函数void changeLR(BiTNode *&T), 交换二叉树T每个结点的左孩子和右孩子,并给出完整代码
时间: 2023-11-13 14:06:03 浏览: 128
交换二叉树中所有结点的左右子树
5星 · 资源好评率100%
下面是实现交换二叉树中每个节点的左右孩子的函数 `changeLR` 的完整代码:
```c++
#include <iostream>
using namespace std;
// 二叉树结点的定义
struct BiTNode {
int data;
BiTNode *lchild;
BiTNode *rchild;
};
// 交换二叉树中每个节点的左右孩子
void changeLR(BiTNode *&T) {
if (T == nullptr) {
return;
}
// 递归交换左右子树
BiTNode *temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
changeLR(T->lchild);
changeLR(T->rchild);
}
// 先序遍历输出二叉树
void preOrder(BiTNode *T) {
if (T == nullptr) {
return;
}
cout << T->data << " ";
preOrder(T->lchild);
preOrder(T->rchild);
}
int main() {
// 构造二叉树
BiTNode *root = new BiTNode{1, nullptr, nullptr};
root->lchild = new BiTNode{2, nullptr, nullptr};
root->rchild = new BiTNode{3, nullptr, nullptr};
root->lchild->lchild = new BiTNode{4, nullptr, nullptr};
root->lchild->rchild = new BiTNode{5, nullptr, nullptr};
root->rchild->lchild = new BiTNode{6, nullptr, nullptr};
root->rchild->rchild = new BiTNode{7, nullptr, nullptr};
cout << "交换前的二叉树(先序遍历):" << endl;
preOrder(root);
cout << endl;
// 交换二叉树中每个节点的左右孩子
changeLR(root);
cout << "交换后的二叉树(先序遍历):" << endl;
preOrder(root);
cout << endl;
return 0;
}
```
函数 `changeLR` 的实现思路是递归地交换每个结点的左右子树,具体的实现方法是先将当前结点的左右孩子交换,然后分别递归交换左右子树。注意在函数中使用了指向指针的引用 `BiTNode *&T`,这是为了在递归过程中可以修改指针指向的地址,从而实现交换。最后在 `main` 函数中构造了一个二叉树,并分别输出交换前后的先序遍历结果,以验证函数的正确性。
阅读全文