思路:
第一个就是最简单的递归. 就摆一下. 第二个是题目要求的iterative循环, 用一个栈记录节点即可, 不过push的时候要记得先push右边再push左子树, 这样才能preorder遍历.
void helper(vector<int>& res, TreeNode* root) {
if (! root) return;
res.push_back(root->val);
helper(res, root->left);
helper(res, root->right);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
helper(res, root);
return res;
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if (! root) return res;
stack<TreeNode*> stk;
stk.push(root);
while (! stk.empty()) {
TreeNode* cur = stk.top();
stk.pop();
res.push_back(cur->val);
if (cur->right)
stk.push(cur->right);
if (cur->left)
stk.push(cur->left);
}
return res;
}