144. 二叉树的前序遍历
示例 1:

输入:root = [1,null,2,3] 输出:[1,2,3]
class Solution {
public:
//递归方法
void traversal(TreeNode* root,vector<int> &result){
if(!root) return;
result.push_back(root -> val);
traversal(root->left , result);
traversal(root->right, result);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
traversal(root, res);
return res;
}
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
//迭代方法
if(!root) return NULL;
stack<TreeNode*> st;
vector<int> res;
st.push(root);
while(!st.empty()){
TreeNode* node = st.top();
st.pop();
res.push_back(node->val);
if(node->right)st.push_back(node->right);
if(node->left)st.push_back(node->left);
}
return res;
}
};
前序遍历:中左右,后序遍历:左右中,中序遍历:左中右
145. 二叉树的后序遍历
class Solution {
public:
void traversal(TreeNode* root,vector<int> &res){
if(!root) return;
traversal(root->left,res);
traversal(root->right,res);
res.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root,result);
return result;
}
};
94. 二叉树的中序遍历
class Solution {
public:
void traversal(TreeNode* root,vector<int>& res){
if(!root) return;
traversal(root->left,res);
res.push_back(root->val);
traversal(root->right,res);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
traversal(root,res);
return res;
}
};
中序遍历的迭代方法:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
if(!root) return res;
auto cur = root;
stack<TreeNode*> st;
while(cur || !st.empty()){
if(cur){
st.push(cur);
cur = cur ->left;
}
else{
cur = st.top();
res.push_back(cur->val);
st.pop();
cur = cur -> right;
}
}
return res;
}
};
本文介绍了如何使用递归和迭代方法进行二叉树的前序、后序和中序遍历。在前序遍历中,顺序是根-左-右;后序遍历是左-右-根;中序遍历是左-根-右。对于递归方法,从根节点开始,分别处理左子树和右子树。而迭代方法通常涉及栈,用于存储未访问的节点。
958





