先序遍歷樹,記錄全部從根節點到葉子結點的路徑。遞歸
void preOrder(Node* root, vector<int>& path) {for循環
if (!root) {二叉樹
return;循環
}遍歷
path.push_back(root->val);數據
preOrder(root->left, path);push
preOrder(root->right, path)path
path.pop_back(); // 此處回溯遞歸調用
}return
回溯法解決四皇后問題時,push和pop是在for循環裏面的,須要循環push和pop四次。
二先序遍歷二叉樹時,只有一次push和pop。
仔細比較其中的差別在於:
在二叉樹的每一個節點,從行來看只有一個數據,因此只會有一次push和pop的回溯,即使是多叉樹,只會影響調用子樹的次數;
而4皇后問題,對於每一行來講,它其實有4個可選的值,每一個值push和pop構成一次回溯
結論:
1,回溯的次數取決於節點的行數
2,樹有多少個字節點,就會遞歸調用幾回子樹。二叉樹只有左右節點