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;
}
};