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

#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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞