二叉树交换子树

【问题描述】编写递归算法,将二叉树中所有节点的左、右子树相互交换。

【输入形式】按先序序列输入二叉树各结点的值,结点的值是单字符,空子树输入空格。
【输出形式】先输出交换后的二叉树的先序序列,再输出中序序列。
【样例输入】例如三个的满二叉树,输入:a,b, , ,c, , (b后有两个空格,表示b有两棵子树;c后有两个空格)

【样例输出】上面的满二叉树交换后的输出:

  acb   //先序序列

  cab   //中序序列

【样例说明】
【评分标准】

对于这种带空格的输入就很狗了,太刁钻了吧,我们只好放弃cin>>,拿起scanf(不要忘了头文件)

a,b, , ,c, , (b后有两个空格,表示b有两棵子树;c后有两个空格) 空格表示空子树

    char n;
	scanf("%c,",&n);     
	if (n == ' ')
		T = NULL;

注意scanf   “%c,”  将,逗号放入已知格式中,在取址输入字符(会是空格)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<stdio.h>
using namespace std;
typedef struct tree
{
	char val;
	struct tree *lc, *rc;
}BiNode,*BiTree;
void Creat(BiTree &T)
{
	char n;
	scanf("%c,",&n);        //注意此处的输入方式
	if (n == ' ')           //输入空格 为空子树
		T = NULL;
	else
	{
		T = new BiNode;
		T->val = n;
		Creat(T->lc);
		Creat(T->rc);
	}
}
BiTree t;
void Exc(BiTree &T)
{
	
	if (T)
	{
		t = T->lc;
		T->lc = T->rc;
		T->rc = t;
		Exc(T->lc);
		Exc(T->rc);
     }
}
void Preorder(BiTree &T)
{
	if (T)
	{
		cout << T->val;
		Preorder(T->lc);
		Preorder(T->rc);
	}
}
void Midorder(BiTree &T)
{
	if (T)
	{
		Midorder(T->lc);
		cout << T->val;
		Midorder(T->rc);
	}
}


int main()
{
	BiTree T;
	Creat(T);
	Exc(T);
	Preorder(T);
	cout << '\n';
    Midorder(T);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值