先序遍历
void BinaryTree::PreOrder(BinTreeNode *current = root)
{
stack<BinTreeNode*> s;
while (current||!s.empty())
{
if (current)
{
cout << current->data << endl;
s.push(current);
current = current->leftChild;
}
else
{
current = s.top();
s.pop();
current = current->rightChild;
}
}
}
中序遍历
void BinaryTree::InOrder(BinTreeNode *current)
{
stack<BinTreeNode*> s;
while (current || !s.empty())
{
if (current)
{
s.push(current);
current = current->leftChild;
}
else
{
current = s.top();
s.pop();
cout << current->data << endl;
current = current->rightChild;
}
}
}
后序遍历
void BinaryTree::PostOrder(BinTreeNode *current)
{
stack<BinTreeNode*> s1;
stack<int> s2;
int flag;
while (current||!s1.empty())
{
if (current)
{
flag = 0;
s1.push(current);
s2.push(flag);
current = current->leftChild;
}
else
{
current = s1.top();
s1.pop();
flag = s2.top();
s2.pop();
if (flag == 0)
{
flag = 1;
s1.push(current);
s2.push(flag);
current = current->rightChild;
}
else
{
cout << current->data << endl;
current = NULL;
}
}
}
}