樹的三種遍歷方式

      今天學到了樹的三種遍歷方式:前序遍歷,中序遍歷,後序遍歷,層序遍歷;這裏的 前中後 指的是頭節點在遍歷中的訪問次序。層序遍歷 就是一層一層的打印 即 由上到下 由左到右 打印。

來看一看這四種遍歷方式的代碼:

      前序遍歷:

void PreorderTraversal( BinTree T ){
	if (T==NULL)//當遍歷到的節點爲空時終止遍歷
	return ;
	printf("%d ",T->Data);//首先打印頭節點
	PreorderTraversal(T->Left);
	PreorderTraversal(T->Right);
}

      中序遍歷:

void InorderTraversal( BinTree T ){
	if (T==NULL)//同理
	return ;
	InorderTraversal(T->Left);
	printf("%d ",T->Data);//打印中間節點
	InorderTraversal(T->Right);
}

      後序遍歷:

void PostorderTraversal( BinTree T ){
	if (T==NULL)
	return ;
	PostorderTraversal( T->Left );
	PostorderTraversal( T->Right);
	printf("%d ",T->Data);//最後打印中間節點
}

      層序遍歷  :層序遍歷不能用遞歸來打印數據,而是用 隊列 來依次儲存節點 然後依次打印。代碼如下:

void LevelorderTraversal( BinTree T ){
	BinTree queue[100];
	int head = 0,tail = 0;
	queue[tail++] = T;
	while (head != tail){ //當head == tail 時即說明 隊列中已經沒有節點了
		printf("%d ",queue[head]->Data);
		if (queue[head]->Left != NULL) queue[tail++] = queue[head]->Left;
		if (queue[head]->Right != NULL) queue[tail++] = queue[head]->Right;
		head ++;
	}
}

 

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