struct BTNode_s{
int value;
BTNode_s* pLeft;
BTNode_s* pRight;
}BTNode;
//非递归 前序
void preOrder(BTNode * pRoot)
{
if(pRoot !=NULL)
{
return;
}
BTNode* p = pRoot;
std::stack<BTNode*> treeStack;
while(p !=NULL || !treeStack.empty())
{
while(p !=NULL)
{
printf("%d\t", p->value);
treeStack(p);
p= p->pLeft;
}
if(!treeStack.empty())
{
p= treeStack.top();
treeStack.pop();
p= p->pRight;
}
}
}
//非递归 中序
void inOrder(BTNode* pRoot)
{
if(pRoot ==NULL)
{
retrun;
}
BTNode* p = pRoot;
std::stack<BTNode*> treeStack;
while(p !=NULL || !treeStack.empty())
{
while(p !=NULL)
{
treeStack.push(p);
p= p->pLeft;
}
if(!treeStack.empty())
{
p= treeStack.top();
printf("%d\t", p->value);
treeStack.pop();
p= p->pRight;
}
}
}
//非递归 后序
void postOrder(BTNode* pRoot)
{
if(pRoot ==NULL)
return;
std::stack<BTNode*> treeStack;
std::stack<int>nodeState;
BTNode* p = pRoot;
while(p !=NULL)
{
treeStack.push(p);
nodeState.push(0);
p= p->pLeft;
}
while(!treeStack.empty())
{
p= treeStack.top();
while(p->pRight!= NULL &&nodeState.top() == 0)
{
nodeState.pop();
nodeState.push(1);
p= p->pRight;
while(p !=NULL)
{
treeStack.push(p);
nodeState.push(0);
p= p->pLeft;
}
p= treeStack.top();
}
p= treeStack.top();
printf("%d\t", p->value);
treeStack.pop();
nodeState.pop();
}
}
本文详细介绍了非递归方式实现二叉树的前序、中序和后序遍历。通过使用栈数据结构,避免了递归调用带来的内存消耗,提高了效率。

被折叠的 条评论
为什么被折叠?



