参考: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;
}