![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YsAjMfVmepNHLCl3N3kXYZVTT5dzNsdUc1Q2TKZTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLjBjZwczMllzMwMTOkZzN4MDNyQzM2UTN4Y2MxUTMkFzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
基礎:遞歸解法
class Solution {
public:
void preorder(TreeNode* &root, vector<int> &ans);
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
preorder(root, ans);
return ans;
}
};
void Solution :: preorder(TreeNode* &root, vector<int> &ans) {
if (root == nullptr) return ;
ans.push_back(root->val);
preorder(root->left, ans);
preorder(root->right, ans);
}
進階:遞推解法
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
/*非遞歸解法
思路:一直向左,邊向左入棧同時push_back()
root指向top()的right
*/
vector<int> ans;
stack<TreeNode *>st;
while (!st.empty() || root != nullptr) {
while (root != nullptr) {
ans.push_back(root->val);
st.push(root);
root = root->left;
}
TreeNode* tmp = st.top();
st.pop(); //容易忘!!!
root = tmp->right;
}
return ans;
}
};