二叉树的非递归遍历(后序遍历的经典解法)
来源:互联网 发布:淘宝男装最出名的店铺 编辑:程序博客网 时间:2024/05/22 17:13
#include <iostream>#include <stack>using namespace std;struct node{ int value; node* lchild; node* rchild;};void PreOrder(node* root){ if(!root) return; stack<node*> view; while(!view.empty() || root) { while(root) { cout << root->value << " "; view.push(root); root = root->lchild; } root = view.top(); view.pop(); root = root->rchild; }}void InOrder(node* root){ if(!root) return; stack<node*> view; while(!view.empty() || root) { while(root) { view.push(root); root = root->lchild; } root = view.top(); cout << root->value << " "; view.pop(); root = root->rchild; }}void PostOrder(node* root){ if(!root) return; stack<node*> view; view.push(root); node* pre = NULL; while(!view.empty()) { node* cur = view.top(); if(((cur->lchild == pre || cur->rchild == pre) && pre) || (!cur->lchild && !cur->rchild)) { cout << cur->value << " "; view.pop(); pre = cur; } else { if(cur->rchild) view.push(cur->rchild); if(cur->lchild) view.push(cur->lchild); } }}int main(){ node* p1 = new node {6, NULL, NULL}; node* p2 = new node {7, NULL, NULL}; node* p3 = new node {4, p1, p2}; node* p4 = new node {5, NULL, NULL}; node* p5 = new node {3, p3, p4}; cout << "preoder:"; PreOrder(p5); cout << endl; cout << "inorder:"; InOrder(p5); cout << endl; cout << "postorder:"; PostOrder(p5); cout << endl; return 0;}