二叉樹樹的三種遍歷

二叉樹樹的三種遍歷

  其實這三種遍歷都是根據遞歸的性質來的,區別在於輸出在調用左邊之前,在右邊之前,以及在右邊之後。

前序遍歷

介紹

  前序遍歷,就是一個觸手不斷的往一個左邊伸手,每摸到一個節點就把它顯示出來,它一路往左邊摸,直到左邊沒節點了,他就返回上一個節點,看下該節點有沒有右邊節點,有的話就摸右邊節點。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);//顯示節點數據
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章