( )19.請問下列程式碼的執行結果為何(nd 為樹狀結構之根節點)? 
(A) 深度優先走訪
(B) 廣度優先走訪
(C) 前序遍歷
(D) 中序遍歷

答案:登入後查看
統計: A(37), B(10), C(4), D(7), E(0) #3098039

詳解 (共 4 筆)

#6471974

這段程式碼描述的是一種遍歷樹狀結構的方法。我們來分析一下它的行為:

C++
void travel(treenode* nd) { for (treenode* nex : nd->childs) { // childs 存放指向每個子節點的指標 travel(nex); } }
  • void travel(treenode* nd): 這是一個遞迴函數,它接收一個指向樹節點的指標 nd 作為參數。
  • for (treenode* nex : nd->childs): 這個迴圈遍歷當前節點 nd 的所有子節點。nd->childs 表示一個包含所有子節點指標的集合或列表。
  • travel(nex);: 在遍歷每一個子節點 nex 時,函式會立即遞迴呼叫 travel(nex)。這意味著在處理完當前節點的所有子節點之前,它會深入到一個子節點的子樹中。

這種遍歷方式的特點是:先訪問當前節點(雖然這裡沒有明確的 "訪問" 操作,但邏輯上函式進入就代表訪問),然後遍歷其第一個子節點的整個子樹,接著第二個子節點的整個子樹,依此類推。 這正是深度優先走訪 (Depth-First Traversal) 的定義。

讓我們看看選項:

  • (A) 深度優先走訪 (Depth-First Traversal):這是正確的。深度優先走訪的特點是盡可能深地探索樹的分支,直到達到葉子節點,然後才回溯到最近的未訪問節點。這個程式碼的遞迴結構完美符合深度優先走訪的模式。

  • (B) 廣度優先走訪 (Breadth-First Traversal):廣度優先走訪是逐層訪問節點,通常使用佇列 (queue) 來實現。它會先訪問所有兄弟節點,然後才訪問下一層的子節點。這段程式碼不符合廣度優先的行為。

  • (C) 前序遍歷 (Pre-order Traversal):前序遍歷是深度優先走訪的一種特定順序,通常指「根 -> 左子樹 -> 右子樹」。雖然這段程式碼是深度優先的,但它並沒有指定是在訪問根節點後立即處理其所有子節點的特定順序,也沒有處理「左右」子樹的概念(因為 childs 可以有多個)。它只是一個通用的深度優先走訪的骨架,不特指「前序」。

  • (D) 中序遍歷 (In-order Traversal):中序遍歷通常應用於二元樹,順序是「左子樹 -> 根 -> 右子樹」。這段程式碼不是中序遍歷。

因此,這段程式碼的執行結果行為是深度優先走訪。

The final answer is A

0
0
#7258243
這是一道關於資料結構與演算法中「樹狀結構...
(共 1951 字,隱藏中)
前往觀看
0
0
#7258255
這是一道關於 資料結構與演算法 中「樹狀...
(共 2123 字,隱藏中)
前往觀看
0
0
#6446306
這段遞迴函式會對每個子節點遞迴呼叫 tr...
(共 173 字,隱藏中)
前往觀看
0
0