前序遍历:
递归方法:
class Solution {
public:
vector<int> v;
void preorder(TreeNode* root)
{
if(root == nullptr)
return ;
v.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
vector<int> preorderTraversal(TreeNode* root) {
preorder(root);
return v;
}
};
非递归方法:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> v;
stack<TreeNode*> st;
while(root != nullptr || !st.empty())
{
//遍历左路结点
while(root != nullptr)
{
v.push_back(root->val);
st.push(root);
root = root->left;
}
if(!st.empty())
{
root= st.top();
st.pop();
root = root->right;
}
}
return v;
}
};
中序遍历:
递归方法:
class Solution {
public:
//递归方法
void inorder(TreeNode* root,vector<int>& v)
{
if(root != nullptr)
{
inorder(root->left,v);
v.push_back(root->val);
inorder(root->right,v);
}
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> v;
inorder(root,v);
return v;
}
};
非递归方法:
class Solution {
public:
//非递归方法
vector<int> inorderTraversal(TreeNode* root) {
vector<int> v;
stack<TreeNode*> st;
while(root != nullptr || !st.empty())
{
//遍历左路结点
while(root != nullptr)
{
st.push(root);
root = root->left;
}
//此时左子树为空,此时取栈顶元素
root = st.top();
st.pop();
v.push_back(root->val);//将取得的栈顶元素放进v中
root = root->right;
}
return v;
}
};
后序遍历:
递归方法:
class Solution {
public:
void postorder(TreeNode* root,vector<int>& v)
{
if(root != nullptr)
{
postorder(root->left,v);
postorder(root->right,v);
v.push_back(root->val);
}
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> v;
postorder(root,v);
return v;
}
};
非递归方法:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> v;
if(root == nullptr)
return v;
TreeNode* cur = root;
TreeNode* prev = nullptr;
while(cur || !st.empty())
{
while(cur)
{
st.push(cur);
cur = cur->left;
}
TreeNode* top = st.top();
if(top->right == nullptr || top->right == prev)
{
v.push_back(top->val);
st.pop();
prev = top;
}
else
{
cur = top->right;
}
}
return v;
}
};