参考:http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html
节点定义: typedef struct Node{ int element; struct Node *left; struct Node *right; struct Node(int data):element(data), left(NULL), right(NULL){} } node;
先序遍历: void preOrder(node *root) { stack<node *> container; node *p = root; while(p||!container.empty()) { while(p) { cout<<p->element<<" "; container.push(p); p = p->left; } if(!container.empty()) { p = container.top(); container.pop(); p = p->right; } } }
中序遍历: void inOrder(node *root) { stack<node*> container; node *p =root; while(p||!container.empty()) { while(p) { container.push(p); p = p->left; } if(!container.empty()) { p = container.top(); container.pop(); cout<<p->element<<" "; p = p->right; } } };
后序遍历: void postOrder(node *root) { stack<node*> container; node *cur=NULL; node *pre = NULL; container.push(root); while(!container.empty()) { cur = container.top(); if((cur->left==NULL&&cur->right==NULL)||(pre!=NULL&&(pre==cur->left||pre==cur->right))) { cout<< cur->element<<" "; container.pop(); pre = cur; } else { if(cur->right!=NULL) container.push(cur->right); if(cur->left) container.push(cur->left); } } }
层次遍历: void levelOrder(node *root) { queue<node *>first; queue<node *>second; node *p = root; first.push(p); while(!first.empty()||!second.empty()) { while(!first.empty()) { p = first.front(); first.pop(); cout <<p->element<<" "; if(p->left) second.push(p->left); if(p->right) second.push(p->right); } cout<<endl; first = second; int size = second.size(); for(int i=0; i<size; i++) second.pop(); } }
二叉树的翻转: node* reverseTree(node *p) { if(p==NULL) return NULL; node *tmp = reverseTree(p->left); p->left = reverseTree(p->right); p->right = tmp; return p; }