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

该博客介绍了如何使用递归算法来交换一棵二叉树的左右子节点。首先定义了二叉树节点结构,然后通过`createtree`函数从字符串中构建二叉树,接着`Exchange`函数实现左右子树的交换,最后通过先序遍历展示交换前后的树结构。代码中包含了创建树、交换节点及先序遍历的功能。
摘要由CSDN通过智能技术生成
#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);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值