二叉樹的深度優先遍歷和廣度優先遍歷

2022-09-17 04:36:08 字數 784 閱讀 3964

深度優先遍歷(棧,先壓右節點,再壓左節點)

也就深入的遍歷,沿著每乙個分支直到走到最後,然後才返回來遍歷剩餘的節點。二叉樹不同於圖,圖需要標記節點是否已經訪問過,因為可能會存在環,而二叉樹不會出現環,所以不需要標記。那麼,我們只需要乙個棧空間,來壓棧就好了。因為深度優先遍歷,遍歷了根節點後,就開始遍歷左子樹,所以右子樹肯定最後遍歷。我們利用棧的性質,先將右子樹壓棧,然後在對左子樹壓棧。此時,左子樹節點是在top上的,所以可以先去遍歷左子樹。

如下是深度優先遍歷的**:

1

void depthfirsttr**el(tree *root) 2

14if(root->lchild !=null)

15

1819

} 20 }

廣度優先遍歷二叉樹(佇列:先壓左節點,再壓右節點)

也就是按層次的去遍歷。依次遍歷根節點,然後是左孩子和右孩子。所以要遍歷完當前節點的所有孩子,這樣才是層次遍歷嘛。此時我們就不能用棧這個資料結構了,因為棧只能在棧頂操作。在這裡,我們需要根據左右孩子的順序來輸出,所以就是先進先出的原則,那麼我們當然就想到了佇列這個資料結構。可以在rear依次插入左右孩子,在front依次讀取並刪除左右孩子,這樣就保證了層次的輸出。

下面是二叉樹的廣度優先遍歷**:

1

void breadthfirsttr**el(tree *root) 2

14if(root->rchild !=null)

15

18}

19 }

二叉樹的深度優先遍歷和廣度優先遍歷

深度優先搜尋演算法 depth first search 是搜尋演算法的一種。是沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個作為源...

二叉樹的深度優先遍歷和廣度優先遍歷

深度優先搜尋演算法 depth first search 是搜尋演算法的一種。是沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個作為源...

二叉樹的深度優先遍歷和廣度優先遍歷

深度優先搜尋演算法 depth first search 是搜尋演算法的一種。是沿著樹的深度遍歷樹的節點,盡可能深的搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個作為源...