我有一個基於矢量的二叉樹,需要使用各種遍歷方法將函數應用到樹中的每個值。前序遍歷使用遞歸函數很容易實現,但我一直在進行inorder和postorder遍歷時遇到問題。如果任何人都能幫上忙,那會很棒!基於矢量的二叉樹遍歷
一些額外的信息,我應該包括: 我使用節點的向量,每個節點包含一個布爾變量,說明該節點是否填充和模板化的數據變量。每個節點存儲在索引「i」處,而其左側的子節點處於索引「2i + 1」,右側的子節點處於「2i + 2」處。
申請前序遍歷到列表中,我首先處理存儲在索引0的數據,然後調用該遞歸函數
template <typename Item, typename Key>
template <typename Function>
void BST<Item,Key>::preTraverse(int n, Function f) {
if(tree[n].occupied == false) return;
else {
f(tree[n].data);
preTraverse(2*i+1,f);
preTraverse(2*i+2,f);
}
}
與指數1 & 2作爲我的「N」參數兩次開始。
請問您可以發佈您設法正確的遍歷代碼嗎?這將有助於我們更好地理解您用來摺疊矢量樹的方式。 – dasblinkenlight
矢量表示有效地是一個最大化的從左到右的定義嗎? (即[我]的孩子在[2i + 1]和[2i + 2]? – WhozCraig
「*預序遍歷很容易...但我[有麻煩]與前序...遍歷*」?也許你didn不知道你想說什麼 –