您的位置:首页 > 其它

编写一个递归算法,实现将一棵二叉树的左右孩子互换。

2013-11-26 15:43 260 查看
#include "iostream"
using namespace std;
#define max 20//定义树的结点数
typedef struct BTNode//定义二叉树结点类型
{
char data;//结点数据类型
struct BTNode *lc,*rc;//左右指针
}BTree;
BTree  *createtree(char *str,int i,int m)//将字符串str中第i到第m个字符创建树
{
BTree *p;
if(i >= m)
return 0;
p = (BTree*)malloc(sizeof(BTree));//生成新结点
p->data = str[i];//将结点的第一个数据赋给根
p->lc = createtree(str,2*i+1,m);//创建左子树
p->rc = createtree(str,2*i+2,m);//创建右子树
return (p);
}
BTree *Exchange(BTree *p)//将p指针指向的二叉树的左右子树进行互换。
{
BTree *stack[max];//指针类型的堆栈
int k = 0;
stack[k] = 0;
if(p != NULL)//交换p结点的左右孩子
{
k++;
stack[k] = p->lc;
p->lc = p->rc;
p->rc = stack[k];

p->lc = Exchange(p->lc);
p->rc = Exchange(p->rc);
}
return(p);
}
void PreOrder(BTree *t)//先序遍历
{
if(t != NULL)
{
cout<<t->data;
if(t->lc)
{
cout<<"->";
PreOrder(t->lc);
}
if(t->rc)
{
cout<<"->";
PreOrder(t->rc);
}
}
}
int main()
{
int i,n;
char str[max];
BTree *root;//二叉树根结点的指针

cout<<"请输入结点数目n:";
cin>>n;
cout<<endl;

cout<<"请输入"<<n<<"个结点:";
for(i = 0;i < n;i++)
cin>>str[i];

root = createtree(str,0,n);  //创建树
cout<<"交换前树的先序遍历:";
PreOrder(root);
cout<<endl;
root = Exchange(root);//交换左右子树
PreOrder(root);
cout<<"交换后树的先序遍历:";
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐