天天看點

輸入二叉樹先序序列,輸出先序,中序,後序序列

/*====================================================
程式功能:輸入二叉樹先序序列,輸出先序,中序,後序序列
作者:令狐榮豪
完成日期:2019/5/19
=====================================================*/
#include<stdio.h>
#include<stdlib.h>

typedef struct BiTNode
{
	char data;//定義二叉連結清單的結構體
	struct BiTNode *lchild, *rchild;
}Bitree;

Bitree *CreateBtree_DLR(Bitree* root);//以先序周遊二叉樹
void PreOrder(Bitree* T);//先序周遊二叉樹
void InOrder(Bitree *T);//中序周遊二叉樹
void PostOrder(Bitree *T);//後序周遊二叉樹


/*================================
函數功能:建構二叉樹
=================================*/
Bitree* CreateBtree_DLR(Bitree* root)
{
	char ch;
	scanf("%c", &ch);
	if (ch == '@')
		root = NULL;
	else
	{
		root = (Bitree*)malloc(sizeof(Bitree));
		root->data = ch;
		root->lchild = CreateBtree_DLR(root->lchild);//構造左子樹
		root->rchild = CreateBtree_DLR(root->rchild);//構造右子樹
	}
	return (root);
}

/*==================================
函數功能:先序周遊遞歸算法
函數輸入:樹的根結點
===================================*/
void PreOrder(Bitree *T)
{
	if (T != NULL)
	{
		printf("%c", T->data);
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
}

/*==================================
函數功能:中序周遊
===================================*/
void InOrder(Bitree *T)
{
	if (T != NULL)
	{
		InOrder(T->lchild);
		printf("%c", T->data);
		InOrder(T->rchild);
	}
}

/*=================================
函數功能:後序周遊
==================================*/
void PostOrder(Bitree *T)
{
	if (T != NULL)
	{
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		printf("%c",T->data);
	}
}

int main()
{
	Bitree *T = NULL;
	printf("輸入二叉樹的先序周遊結點,建立二叉樹。(子樹為空時輸入@)\n");
	T = CreateBtree_DLR(T);

	printf("\n先序周遊結果:\n");
	PreOrder(T);
	printf("\n中序周遊結果:\n");
	InOrder(T);
	printf("\n後序周遊的結果:\n");
	PostOrder(T);
	return 0;
}
           

繼續閱讀