#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");
}
编写一个递归算法,实现将一棵二叉树的左右孩子互换。
原文作者:递归算法
原文地址: https://blog.csdn.net/zl19890124/article/details/16965941
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/zl19890124/article/details/16965941
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。