二叉树的操作(交换左右子树)

【问题描述】二叉树按照二叉链表的方式存储。编写程序,计算二叉树中叶子结点的数目并输出;编写程序,将二叉树的左右子树进行交换,并输出交换后的二叉树的后序遍历序列。

【输入形式】二叉树的前序遍历序列,空指针的位置输入字符#

【输出形式】

叶子结点的数目

左右子树交换后,后序遍历的序列,空子树的位置输出字符#

【样例输入】

ABE##F##CG###

【样例输出】

3

###GC##F##EBA

#include<iostream>
#include<stdlib.h>
#include<cstring>
using namespace std;
int count=0;

struct BiTNode
{
	char data;
	BiTNode *LChild;
	BiTNode *RChild;
};

void Create(BiTNode *&T)
{
	char ch;
	cin>>ch;
	if(ch=='#')
	T=NULL;
	else
	{
		T=(BiTNode*)malloc(sizeof(BiTNode));
		T->data=ch;
		Create(T->LChild);
		Create(T->RChild);
	}
}

void PreLeaf(BiTNode *T)
{
	if(T!=NULL)
	{
		if(T->LChild==NULL&&T->RChild==NULL)
		{
			count++;
		}
		PreLeaf(T->LChild);
		PreLeaf(T->RChild);
	}
}

void Exchange(BiTNode *T)
{
	BiTNode *temp=NULL;
	if(T!=NULL)
	{
		temp=T->RChild;
		T->RChild=T->LChild;
		T->LChild=temp;
		Exchange(T->LChild);
		Exchange(T->RChild);
	}
	else
	return;
}

void PostOrder(BiTNode *T)
{
	if(T==NULL)
	cout<<'#';
	if(T!=NULL)
	{
		PostOrder(T->LChild);
		PostOrder(T->RChild);
		cout<<T->data;
	}
}

int main()
{
	BiTNode *T=NULL;
	Create(T);
	PreLeaf(T);
	cout<<count<<endl;
	Exchange(T);
	PostOrder(T);
}

猜你喜欢

转载自blog.csdn.net/weixin_43579811/article/details/89675285