回溯法和樹的先序遍歷

 

先序遍歷樹,記錄全部從根節點到葉子結點的路徑。遞歸

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,樹有多少個字節點,就會遞歸調用幾回子樹。二叉樹只有左右節點