二叉树 后序遍历 无tag域非递归实现

PS:看到网上N多都是有tag域的 这个暂时没发现什么bug 所以恳请哪位大神发现了帮忙指正一下!!3Q啦!!

template<class T>
void BSTree<T>::PostorderTraversal( ostream &os ){
	BSTNode<T> *p = NULL;

	stack<BSTNode<T> *> st;
	st.push( _root );
	while( !(st.empty()) )
	{
		while( (p = st.top()) != NULL ) st.push( p->lchild );

		// 空指针退栈.
		st.pop();

		if( !st.empty() )
		{
			//
			// Rightwards one step.

			p = st.top();

			st.push( p->rchild );

			//
			// Output if satisfied the conditions.

			if( st.top() == NULL ){
				// 空指针退栈.
				st.pop();

				p = st.top();
				st.pop();
				os << p->_elem << " ";
			}

			if( !st.empty() ){
				// 若是右子树出来的,一直退栈.
				for( BSTNode<T> *pParent = st.top(); !st.empty() && p == pParent->rchild; ){
					p = st.top();
					st.pop();
					os << p->_elem << " ";

					if( !st.empty() )
						pParent = st.top();
				}
			}

			// 若输出后,则必须继续向右走一步.
			if( !st.empty() && p == st.top()->lchild ){
				p = st.top();
				st.push( p->rchild );
			}
		}
	}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值