非递归后序遍历二叉树

非递归前序遍历二叉树,请看这里。

非递归后序遍历二叉树:

遍历时,除了用栈保存子树根节点,还要保存对子树根节点的访问次数。

#include<stack>
#include <utility>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

struct node
{
	node* left;
	node* right;
	int value;

	node(node* l, node* r, int v)
	{
		left = l;
		right = r;
		value = v;
	}
}; 


void postorder(node* root)
{
	stack<pair<node*,int>> st;

	while(!st.empty() || root)
	{
		while(root)
		{
			st.push(pair<node*,int>(root, 1));
			root = root->left;
		}
		
		while(!st.empty() && st.top().second==2)
		{
				root = st.top().first;
				printf("%d|",root->value);
				st.pop();
		}
			
		if( st.top().second == 1 )
		{
			root = st.top().first->right;
			st.top().second++;
		}
	}
}


int main()
{
	node * n1 = new node(NULL, NULL, 1);
	node * n2 = new node(NULL, NULL, 2);
	node * n3 = new node(NULL, NULL, 3);
	node * n4 = new node(NULL, NULL, 4);
	node * n5 = new node(n1, n2, 5);
	node * n6 = new node(n3, n4, 6);
	node * n7 = new node(n5, n6, 7);

	postorder(n7);
}

你可能感兴趣的:(非递归后序遍历二叉树)