今天學到了樹的三種遍歷方式:前序遍歷,中序遍歷,後序遍歷,層序遍歷;這裏的 前中後 指的是頭節點在遍歷中的訪問次序。層序遍歷 就是一層一層的打印 即 由上到下 由左到右 打印。
來看一看這四種遍歷方式的代碼:
前序遍歷:
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 ++;
}
}