二叉树的遍历

来源:互联网 发布:过期域名抢注平台 编辑:程序博客网 时间:2024/05/16 13:38
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);        }    }}

二叉树的先序、中序、后序遍历,递归实现与非递归实现版本。
原创粉丝点击