题目大意:返回二叉树的前序遍历
分析:递归/迭代。
迭代:利用栈,初始时root进栈,开始循环,当栈非空时弹出栈顶元素,访问它,并依次压入右节点和左节点。这样就能做到先访问该节点,然后访问它的左节点,然后访问它的右节点,符合前序遍历。
代码:
方法一:递归
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> preorder;
dfs(root,preorder);
return preorder;
}
void dfs(TreeNode* root, vector<int>& preorder) {
if(!root) return;
preorder.push_back(root->val);
dfs(root->left, preorder);
dfs(root->right, preorder);
}
};
方法二:迭代
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> preorder;
if(!root) return preorder;
stack<TreeNode*> s;
s.push(root);
while(!s.empty()){
TreeNode* top = s.top();
s.pop();
preorder.push_back(top->val);
if(top->right) s.push(top->right);
if(top->left) s.push(top->left);
}
return preorder;
}
};