初學數據結構之二叉樹

一:二叉樹的鏈表實現
typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode
{
	int Data;
	BinTree Left;
	BinTree Right;
}

二:二叉樹的遍歷
void PreOrderTraveral(BinTree BT)           //前序遍歷
{
	if(BT)
	{
		printf("%d",BT->Data);
		PreOrderTraveral(BT->Left);
		PreOrderTraveral(BT->Right);		
	}
}
void InOrderTraveral(BinTree BT)           //中序遍歷
{
	if(BT)
	{	
		InOrderTraveral(BT->Left);
		printf("%d",BT->Data);
		InOrderTraveral(BT->Right);		
	}
}
void PostOrderTraveral(BinTree BT)           //後序遍歷
{
	if(BT)
	{	
		PostOrderTraveral(BT->Left);
		PostOrderTraveral(BT->Right);	
		printf("%d",BT->Data);	
	}
}
void InOrderTraveral(BinTree BT)           //中序遍歷的堆棧實現
{
	BinTree T=BT;
	Stack S=CreatStack(MaxSize);
	while(T || !IsEmpty(S))
	{
		while(T)
		{
			Push(S,T);
			T=T->Left;
		}
		if(!IsEmpty(S))
		{
			T=Pop(S);
			printf("%5d",T->Data);
			T=T->Right;
		}
	}	
}
void PreOrderTraveral(BinTree BT) 	//先序遍歷的堆棧實現
{
	BinTree T=BT;
	Stack S=CreatStack(MaxSize);
	while(T || !IsEmpty(S))
	{
		while(T)
		{
			Push(S,T);
			printf("%5d",T->Data);
			T=T->Left;
		}
		if(!IsEmpty(S))
		{
			T=Pop(S);
			T=T->Right;
		}
	}	
}
void LevelOrderTraveral(BinTree BT) 	//層次遍歷的隊列實現
{
	QueneQ;
	BinTree T;
	if(!BT)
	return;
	Q=CreatQuene(MaxSize);
	Add(Q,BT);
	T=DelectQ(Q);
	printf("%d\n",T->Data);
	if(T->Left)
	AddQ(Q,T->Left);
	if(T->Right)
	AddQ(Q,T->Right);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章