非递归后序遍历二叉树

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

非递归后序遍历二叉树:

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

#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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值