1.前序非递归遍历
void pretraverse(treenode *root) {
if (root) {
stack<treenode *> st;
treenode *r =root;
while (!st.empty()||r) {
while (r) {
st.push(r);
cout << r->val;
r = r->left;
}
if (!st.empty()) {
r = st.top();
st.pop();
r = r->right;
}
}
}
}
2.中序非递归遍历
void intraverse(treenode *root) {
if (root) {
stack<treenode *> st;
treenode *r = root;
while (!st.empty() || r) {
while (r) {
st.push(r);
r = r->left;
}
if (!st.empty()) {
r = st.top();
cout << r->val;
st.pop();
r = r->right;
}
}
}
}
3.后序非递归遍历
void postraverse(TreeNode *root) {
if (root) {
stack<TreeNode*> st;
TreeNode* p=root,*r=NULL;
while (p || !st.empty()) {
if (p) {
st.push(p);
p = p->left;
}
else {
p = st.top();
if(p->right!=NULL&&p->right != r){
p = p->right;
}
else {
st.pop();
cout << p->val;
r = p;
p = NULL;
}
}
}
}
}