#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<<" ";
}
//非递归先序遍历,方法1
void PreOrder(BTreeNode *root)
{
stack<BTreeNode *> s;
while((root != NULL) || !s.empty())
{
if(root != NULL)
{
visit(root);
s.push(root);
//依次访问左子树
root = root->m_pLeft;
}
else
{
//回溯到父节点
root = s.top();
s.pop();
root = root->m_Right;
}
}
}
//非递归先序遍历,方法2
void bxy(BTreeNode *root)
{
if(root != NULL)
{
stack<BTreeNode *> s;
s.push(root);
while(!s.empty())
{
BTreeNode *node = s.top();
s.pop();
visit(node);
if(node->m_Right != NULL)
{
s.push(node->m_Right);
}
if(node->m_pLeft != NULL)
{
s.push(node->m_pLeft);
}
}
}
}
//按照先序创建二叉树,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 << "非递归先序遍历:";
bxy(root);
cout << endl;
}
创建树:1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
非递归先序遍历:1 2 4 5 3 6 7
请按任意键继续. . .