1. 程式人生 > >二叉樹的建立及中後序遍歷

二叉樹的建立及中後序遍歷

Problem Description

按照給定的擴充套件二叉樹前序遍歷序列建立相應的非空二叉樹,要求採用二叉連結串列進行儲存表示,並對其進行中序和後序遍歷,輸出中後序遍歷序列後請銷燬二叉連結串列以釋放記憶體。
Input

第一行為一個整數n,表示以下有n組資料,每組資料佔一行,為擴充套件二叉樹的前序遍歷序列。
Output

輸出該二叉樹的中序和後序遍歷序列,每個序列佔一行,每兩組輸出之間有一換行。
Sample Input

3
AB#D##C##
AB##C#D##
ABD##E##C#F##
Sample Output

BDAC
DBCA

BACD
BDCA

DBEACF
DEBFCA

#include<iostream>
using namespace  std;
struct BiNode
{
	char data;
	BiNode *lchild,
		*rchild;
};
BiNode *creat()
{
	BiNode *bt = NULL;
	char ch;
	cin >> ch;
	if (ch != '#')
	{
		bt = new BiNode;
		bt->data = ch;
		bt->lchild = creat();
		bt->rchild = creat();
	}
	return bt;
}
void InOrder(BiNode *bt)
{
	if (bt)
	{
		InOrder(bt->lchild);
		cout << bt->data;
		InOrder(bt->rchild);
	}
}
void PostOrder(BiNode *bt)
{
	if (bt)
	{
		PostOrder(bt->lchild);
		PostOrder(bt->rchild);
		cout << bt->data;
	}
}
void Release(BiNode *bt)
{
	if (bt)
	{
		Release(bt->lchild);
		Release(bt->rchild);
		delete bt;
	}
}
int main()
{
	int n;
	BiNode *root;
	while (cin >> n)
	{
		while (n--)
		{
			root = creat();
			InOrder(root);
			cout << endl;
			PostOrder(root);
			cout << endl;
			if (n != 0)
				cout << endl;
			Release(root);
		}
	}
	system("pause");
	return 0;
}