非递归方法实现 二叉树的 DFS(Pre Order), Post Order

来源:互联网 发布:公司开淘宝店要交税吗 编辑:程序博客网 时间:2024/06/17 09:13

Post Order比较难以理解,开辟的lastVisited记录上次访问的点,如果这个点是当前点的右孩子,则打印当前点 


#include <iostream>#include <stack>struct node{int data;node* left;node* right;node(int exData){data = exData;left = NULL;right = NULL;}};void dfs(node* root){std::stack<node*> st;node* cur = root;while(cur || !st.empty()){while(cur){st.push(cur);std::cout << cur->data << " ";cur = cur->left;}if(!st.empty()){cur = st.top();cur = cur->right;st.pop();}}};void postOrderTrav(node *root){std::stack<node*> st;node* cur = root;node* lastVisited = NULL;node* p = NULL;while(cur || !st.empty()){while(cur){st.push(cur);cur = cur->left;}p = st.top();if(!p->right || p->right == lastVisited){std::cout << p->data << " ";lastVisited = p;st.pop();}else{cur = p->right;}}};int main(){node* n1 = new node(1);node* n2 = new node(2);node* n3 = new node(3);node* n4 = new node(4);node* n5 = new node(5);node* n6 = new node(6);node* n7 = new node(7);node* n8 = new node(8);node* n9 = new node(9);node* n10 = new node(10);node* n11 = new node(11);node* n12 = new node(12);node* n13 = new node(13);node* n14 = new node(14);node* n15 = new node(15);node* n16 = new node(16);n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;n5->left = n6;n5->right = n7;n7->left = n8;n7->right = n9;n9->right = n10;n3->left = n11;n3->right = n14;n11->right = n12;n12->right = n13;n14->left = n15;n14->right = n16;postOrderTrav(n1);return 0;}


原创粉丝点击