二叉樹樹的三種遍歷
其實這三種遍歷都是根據遞歸的性質來的,區別在於輸出在調用左邊之前,在右邊之前,以及在右邊之後。
前序遍歷
介紹
前序遍歷,就是一個觸手不斷的往一個左邊伸手,每摸到一個節點就把它顯示出來,它一路往左邊摸,直到左邊沒節點了,他就返回上一個節點,看下該節點有沒有右邊節點,有的話就摸右邊節點。emmmm,這是個觸手怪,他從根節點開始摸,有個原則。1,優先摸左子節點,如果沒有左子節點就返回父節點。再摸其他子節點。原則是根節點->左節點->右節點。。。擴大遞歸就好了。
圖解
前序遍歷:【1,2,4,5,3,6,7】
算法實現
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
return;
printf("%c",T->data);//顯示節點數據
PreOrderTraverse(T->lchild);//遍歷左子樹
PreOrderTraverse(T->rchild);//遍歷右子樹
}
中序遍歷
中序遍歷是一直往左邊走,走不動了。再返回
介紹
中序遍歷原則是左節點->根節點->右節點
圖解
中序遍歷:[4,2,5,1,3,7,6]
算法實現
void InOrderTraverse(BiTree T)
{
if(T == NULL)
return;
InOrderTraverse(T->lchild);//遍歷左子樹
printf("%c",T->data);//顯示節點數據
InOrderTraverse(T->rchild);//遍歷右子樹
}
後序遍歷
介紹
後序遍歷原則是左節點->右節點->根節點
圖解
後序遍歷:[4,5,2,7,6,3,1]
算法實現
void PostOrderTraverse(BiTree T)
{
if(T == NULL)
return;
PostOrderTraverse(T->lchild);//遍歷左子樹
PostOrderTraverse(T->rchild);//遍歷右子樹
printf("%c",T->data);//顯示節點數據
}