思想:
1、先写递归交换函数
2、再写一个交换两个树结点的函数
函数:
void swap(BTNode *t){
if(!t)
return;
swap(t->lchild);
swap(t->rchild);
swapNode(t->lchild,t->rchild);
}
//交换两个树结点
//只要是交换的题,就套用这个函数
void swapNode(BTNode *&p,BTNode *&q){
BTNode *temp;
temp=p;
p=q;
q=temp;
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
//用于使用c++的输出语句
#include<iostream>
using namespace std;
//二叉树结构体定义
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void swap(BTNode *t);
void swapNode(BTNode *&p,BTNode *&q);
void preOrder(BTNode *t);
void visit(BTNode *p);
void createBiTree(BTNode* &T);
void main(){
BTNode *t;
createBiTree(t);
preOrder(t);
swap(t);
preOrder(t);
}
void swap(BTNode *t){
if(!t)
return;
swap(t->lchild);
swap(t->rchild);
swapNode(t->lchild,t->rchild);
}
//交换两个树结点
void swapNode(BTNode *&p,BTNode *&q){
BTNode *temp;
temp=p;
p=q;
q=temp;
}
void createBiTree(BTNode* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(BTNode *)malloc(sizeof(BTNode));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
createBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
createBiTree(T->rchild);
}
}
void preOrder(BTNode *t){
if(!t)
return;
visit(t);
preOrder(t->lchild);
preOrder(t->rchild);
}
void visit(BTNode *p){
cout<<p->data<<"\t";
//...
}
本文介绍如何使用二叉链表存储二叉树,并通过递归方式实现二叉树所有节点的左右子树交换。首先阐述思路,接着提供交换函数的详细代码,最后进行测试验证。

被折叠的 条评论
为什么被折叠?



