二叉树前序遍历:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> res;
if(root==NULL)return res;
stack<TreeNode *> sta;
sta.push(root);
while(!sta.empty())
{
TreeNode *tmp=sta.top();
sta.pop();
res.push_back(tmp->val);
if(tmp->right)sta.push(tmp->right);
if(tmp->left)sta.push(tmp->left);
}
return res;
}
/**
void preorder(vector<int> &res, TreeNode * root)
{
if(root==NULL)return;
res.push_back(root->val);
preorder(res,root->left);
preorder(res,root->right);
}
vector<int> preorderTraversal(TreeNode *root) {
vector<int> res;
preorder(res,root);
return res;
}
*/
};
二叉树中序遍历:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root)
{
vector<int> res;
if(root==NULL)return res;
TreeNode *p=root;
stack<TreeNode *> sta;
while(p!=NULL||!sta.empty())
{
while(p!=NULL)
{
sta.push(p);
p=p->left;
}
if(!sta.empty())
{
p=sta.top();
sta.pop();
res.push_back(p->val);
p=p->right;
}
}
return res;
}
/*
void inorder(TreeNode *root, vector<int> &res)
{
if(root==NULL)return;
inorder(root->left,res);
res.push_back(root->val);
inorder(root->right,res);
return;
}
vector<int> inorderTraversal(TreeNode *root) {
vector<int> res;
inorder(root,res);
return res;
}
*/
};
二叉树后序遍历:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> res;
if(root==NULL)return res;
map<TreeNode *, int> smap;
smap[root]=0;
stack<TreeNode *> sta;
sta.push(root);
while(!sta.empty())
{
TreeNode *p=sta.top();
if((!p->right&&!p->left)||smap.count(p->right)||smap.count(p->left))
{
res.push_back(p->val);
smap[p]=1;
sta.pop();
}
else
{
if(p->right&&!smap.count(p->right))
{
sta.push(p->right);
smap[p->right]=0;
}
if(p->left&&!smap.count(p->left))
{
sta.push(p->left);
smap[p->left]=0;
}
}
}
return res;
}
/**
void postorder(vector<int> & res,TreeNode *root)
{
if(root==NULL)return;
postorder(res,root->left);
postorder(res,root->right);
res.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode *root) {
vector<int> res;
postorder(res,root);
return res;
}
*/
};