/* non-recursion postorder */
template <typename T>
void BinaryTree<T>::PostorderNonRecursion()
{
if(NULL==root)
{
return;
}
using std::stack;
stack< TreeNode<T> *> s;
TreeNode<T> *pTreeNode=root;
do
{
while(pTreeNode!=NULL)
{
s.push(pTreeNode);
pTreeNode=pTreeNode->mLeft;
}
pTreeNode=s.top()->mRight;
if(pTreeNode!=NULL)
{
continue;
}
else
{
TreeNode<T> *t;
s.top()->ProcessData();
t=s.top();
s.pop();
while(!s.empty() && s.top()->mRight==t)
{
s.top()->ProcessData();
t=s.top();
s.pop();
}
if(!s.empty())
{
pTreeNode=s.top()->mRight;
}
}
}while(!s.empty());
}
非递归后序遍历二叉树
最新推荐文章于 2024-07-17 12:11:36 发布