二叉树的非递归遍历
先序:
-
void clr(node t[]){
-
stack<node*> st;
-
node* h = &t[0];
-
while(h||!st.empty()){
-
while(h){
-
visit(h->data);
-
st.push(h->rchild);
-
h = h->lchild;
-
}
-
if(!st.empty()){
-
h = st.top();
-
st.pop();
-
}
-
}
-
}
中序:
-
void lcr(node t[]){
-
stack<node*> st;
-
node* h = &t[0];
-
while(h||!st.empty()){
-
while(h){
-
st.push(h);
-
h = h->lchild;
-
}
-
if(!st.empty()){
-
h = st.top();
-
st.pop();
-
visit(h->data);
-
h = h->rchild;
-
}
-
}
-
}
后序:
-
void lrc(node t[]){
-
stack<node*> st;
-
stack<int> flagst;
-
node* h = &t[0];
-
int flag = 0;
-
while(h||!st.empty()){
-
while(h){
-
st.push(h);
-
flagst.push(0);
-
h = h->lchild;
-
}
-
h = st.top();
-
st.pop();
-
flag = flagst.top();
-
flagst.pop();
-
while(flag){
-
visit(h->data);
-
if(!st.empty()){
-
h = st.top();
-
st.pop();
-
flag = flagst.top();
-
flagst.pop();
-
}else{
-
return;
-
}
-
}
-
st.push(h);
-
flagst.push(1);
-
h = h->rchild;
-
}
-
}
- 无匹配