一:题目
二:上码
1:递归
class Solution {
public:
void preorder(TreeNode* root,vector<int>&v ) {
if(root == NULL) return;
v.push_back(root->val);
preorder(root->left,v);
preorder(root->right,v);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
preorder(root,ans);
return ans;
}
};
2:迭代遍历
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
/**
思路:1.迭代遍历
2.这里我们用到了栈,其实递归遍历中的递归本质就是栈(操作系统层面上的),我们在递归的时候
当遇到递归终止条件的时候,是一层一层往回返,那这的话,就是栈的先进后出特性.
3.迭代遍历,中我们先将根节点入队,然后将其出队将其出队的结点的右节点先入队,然后再将
左节点入队,(这是为了保证出队的时候我们的顺序是先序的顺序 中左右)
**/
vector<int> ans;
stack<TreeNode*>st;
if(root != NULL)
st.push(root);
while(!st.empty()) {
TreeNode* value = st.top();
ans.push_back(value->val);
st.pop();
if(value->right) st.push(value->right);
if(value->left) st.push(value->left);
}
return ans;
}
};
如有疑问请留言!!! 一个人可以走的很快 团结协作才能走的更远!!!!!!!!