递归算法没什么好说的,非递归算法的前中后序遍历都是一个模板
中序遍历
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
//中序遍历 左根右
stack<TreeNode*> s;
TreeNode *p = root;
while (!s.empty() || p != NULL)
{
if (p){
s.push(p);
p=p->left;
}
else{
p=s.top();
res.push_back(p->val);//出栈的时候访问
s.pop();
p=p->right;
}
}
return res;
}
先序遍历
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode *p=root;
while(!s.empty()||p!=NULL)
{
if(p){
res.push_back(p->val);
s.push(p);
p=p->left;
}else{
p=s.top();
s.pop();
p=p->right;
}
}
return res;
}