#include <iostream>
#include <stack>
using namespace std;
//树结构
struct BTreeNode
{
int m_nValue;
BTreeNode *m_pLeft;
BTreeNode *m_Right;
};
void visit(BTreeNode *n)
{
cout<< n->m_nValue<<" ";
}
//非递归中序遍历,利用栈实现
void InOrder(BTreeNode *root)
{
stack<BTreeNode *> s;
while(root != NULL || !s.empty())
{
while(root != NULL)
{
s.push(root);
root = root->m_pLeft;
}
if(!s.empty())
{
root = s.top();
s.pop();
visit(root);
root = root->m_Right;
}
}
}
//按照先序创建二叉树,0表示空
BTreeNode *CreateTree()
{
int ch;
cin>> ch;
if(ch == 0)
{
return NULL;
}
else
{
BTreeNode *root = new BTreeNode();
root->m_nValue = ch;
root->m_pLeft = CreateTree();
root->m_Right = CreateTree();
return root;
}
}
void main()
{
BTreeNode *root = NULL;
cout <<"创建树:";
root = CreateTree();
cout << "非递归先序遍历:";
InOrder(root);
cout << endl;
}
//运行结果
//创建树:1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
//非递归先序遍历:4 2 5 1 6 3 7
//Press any key to continue