void preorder(node_t *r){
if(!r)return ;
cout<<r->val<<' ';
preorder(r->lc);
preorder(r->rc);
}
void preorder_nonrecursive(node_t *r){
cout<<"preorder_nonrecursive"<<endl;
if(!r)return;
stack<node_t *> st;
st.push(r);
while(!st.empty()){
node_t *cur = st.top();
cout<<cur->val<<' ';
st.pop();
if(cur->rc){
st.push(cur->rc);
}
if(cur->lc){
st.push(cur->lc);
}
}
cout<<endl;
}
void inorder(node_t *r){
if(!r)return;
inorder(r->lc);
cout<<r->val<<' ';
inorder(r->rc);
}
void inorder_nonrecursive(node_t *r){
cout<<"inorder_nonrecursive"<<endl;
if(!r)return;
stack<node_t *> st;
bool flag = true;
st.push(r);
while(!st.empty()){
node_t *cur = st.top();
if(!cur->lc || !flag){
st.pop();
cout<<cur->val<<' ';
if(cur->rc){
st.push(cur->rc);
flag = true;
}else {
flag = false;
}
}else {
st.push(cur->lc);
}
}
cout<<endl;
}
void postorder_nonrecursive(node_t *r){
if(!r)return;
stack<node_t *> st;
node_t *pre = r;
st.push(r);
while(!st.empty()){
node_t *cur = st.top();
if(!cur->lc && !cur->rc){
cout<<cur->val<<' ';
pre = cur;
st.pop();
}else if(pre == cur->lc || pre == cur->rc){
cout<<cur->val<<' ';
pre = cur;
st.pop();
}else {
if(cur->rc) st.push(cur->rc);
if(cur->lc) st.push(cur->lc);
}
}
}
二叉树的先序、中序、后序遍历,递归实现与非递归实现版本。
本文提供了二叉树的先序、中序、后序遍历的递归与非递归实现代码示例。通过这些示例,读者可以了解不同遍历方式的实现原理及其在实际编程中的应用。
2213

被折叠的 条评论
为什么被折叠?



