#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct TreeNode
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
char chDate;
TreeNode *lChild;
TreeNode *rChild;
int tag;
}TreeNode, *BiTree;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int count = 0;
char a[15] =
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{'a', 'b', 'd', '@', '@', 'e', '@', '@',
'c', 'f', '@', '@', 'g', '@', '@'};
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
class newStack
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
public:
newStack()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
top = -1;
maxSize = 10;
nums = new BiTree[maxSize];
};
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
~newStack()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
delete []nums;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
void Push(BiTree mdate)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
assert(top < maxSize - 1);
top++;
nums[top] = mdate;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BiTree pop()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//assert(top > 0);
return nums[top--];
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BiTree GetTop()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return nums[top];
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int IsEmpty()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(top > -1)
return 1;
else
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private:
BiTree *nums;
int maxSize;
int top;
};
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void CreatTreeNode(BiTree &other)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
char c;
//cout<<"Input the date of the Node: ";
//cin>>c;
c = a[count];
count++;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(c == '@')
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
other = NULL;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
other = new TreeNode;
other->chDate = c;
CreatTreeNode(other->lChild);
CreatTreeNode(other->rChild);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void Visit(TreeNode *Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if(Node)
cout<<Node->chDate<<endl;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void PreOrder(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if(Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Visit(Node);
PreOrder(Node->lChild);
PreOrder(Node->rChild);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void InOrder(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if(Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
InOrder(Node->lChild);
Visit(Node);
InOrder(Node->rChild);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void PostOrder(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if(Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
PostOrder(Node->lChild);
PostOrder(Node->rChild);
Visit(Node);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void PreOrderWithoutRecursion(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
newStack *myStack = new newStack;
BiTree Temp = Node;
while(Temp || myStack->IsEmpty())
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(Temp)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Visit(Temp);
myStack->Push(Temp);
Temp = Temp->lChild;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Temp = myStack->GetTop();
myStack->pop();
Temp = Temp->rChild;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
delete myStack;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void InOrderWithoutRecursion(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
newStack *myStack = new newStack;
BiTree Temp = Node;
while(Temp || myStack->IsEmpty())
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(Temp)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
myStack->Push(Temp);
Temp = Temp->lChild;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Temp = myStack->GetTop();
Visit(Temp);
Temp = Temp->rChild;
myStack->pop();
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
delete myStack;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void PostOrderWithoutRecursion(BiTree Node)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
newStack *myStack = new newStack;
BiTree Temp = Node;
while(Temp || myStack->IsEmpty())
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
while(Temp)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Temp->tag = 0;
myStack->Push(Temp);
Temp = Temp->lChild;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Temp = myStack->GetTop();
myStack->pop();
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(Temp->tag == 1)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Visit(Temp);
if(!myStack->IsEmpty())
return;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Temp = myStack->GetTop();
myStack->pop();
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Temp->tag = 1;
myStack->Push(Temp);
Temp = Temp->rChild;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
delete myStack;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void main()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
BiTree myBiTree;
CreatTreeNode(myBiTree);
cout<<"PreOrder:"<<endl;
PreOrder(myBiTree);
cout<<"PreOrderWithoutRecursion:"<<endl;
PreOrderWithoutRecursion(myBiTree);
cout<<"InOrder:"<<endl;
InOrder(myBiTree);
cout<<"InOrderWithoutRecursion:"<<endl;
InOrderWithoutRecursion(myBiTree);
cout<<"PostOrder:"<<endl;
PostOrder(myBiTree);
cout<<"PostOrderWithoutRecursion:"<<endl;
PostOrderWithoutRecursion(myBiTree);
int z;
cin>>z;
}
posted on
2009-06-09 18:37
Jackill
阅读(
198)
评论()
编辑
收藏
举报