144.二叉树的前序遍历
- 题目描述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
二叉树的前序遍历
- 递归
class Solution {
public:
void preorder(TreeNode* root, vector<int>& v){
if(root == nullptr)
return;
v.push_back(root->val);
preorder(root->left,v);
preorder(root->right,v);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> vec;
preorder(root,vec);
return vec;
}
};
- 迭代(非递归实现)
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode *> st;
vector<int> vec;
if(root == nullptr)
return vec;
TreeNode * q = root;
while(q !=nullptr ||!st.empty()){
while(q != nullptr){
vec.push_back(q->val);
//边遍历边打印
st.push(q);
q = q -> left;
}
if( !st.empty()){
q = st.top();
st.pop();
q = q->right;
}
}
return vec;
}
};
本文详细解析了如何使用递归和迭代方法实现二叉树的前序遍历,包括递归算法的代码实现和非递归迭代算法的步骤。适合初学者理解二叉树遍历的两种常见方式。
630

被折叠的 条评论
为什么被折叠?



