假设一个非空二叉树采用二叉链储存结构,所有结点值为单个字符且不相同。编写一个实验程序,将一棵二叉树bt的左右子树进行交换,要求不破坏原二叉树
时间: 2023-12-08 08:04:29 浏览: 127
(报告和程序完善)西南交大-数据结构实验报告-树-二叉树的字符图形显示程序(半期测试)-完整程序及报告.zip
的储存结构。
可以使用递归的方式遍历二叉树,对于每一个节点都将其左右子树交换即可实现二叉树的左右子树交换。
具体的实现代码如下:
```c++
#include <iostream>
using namespace std;
struct Node
{
char data;
Node* left;
Node* right;
};
Node* newNode(char data)
{
Node* root = new Node();
root->data = data;
root->left = NULL;
root->right = NULL;
return root;
}
void swapSubtree(Node* root)
{
if (root == NULL)
return;
Node* temp = root->left;
root->left = root->right;
root->right = temp;
swapSubtree(root->left);
swapSubtree(root->right);
}
void inorder(Node* root)
{
if (root == NULL)
return;
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
int main()
{
Node* root = newNode('A');
root->left = newNode('B');
root->right = newNode('C');
root->left->left = newNode('D');
root->left->right = newNode('E');
root->right->left = newNode('F');
root->right->right = newNode('G');
cout << "原始二叉树:";
inorder(root);
swapSubtree(root);
cout << "\n交换后的二叉树:";
inorder(root);
return 0;
}
```
输出结果:
```
原始二叉树:D B E A F C G
交换后的二叉树:G C F A E B D
```
注意:以上代码中只是打印输出了交换后的二叉树的中序遍历结果,实际上原始的二叉树的储存结构没有改变。
阅读全文