二叉树的先序、中序、后序、层次遍历的非递归实现及二叉树的翻转递归实现

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

  

原文地址:https://www.cnblogs.com/break-python/p/5316995.html