/*树结构定义和操作声明*/
typedef int TElemtype;
typedef struct _TNode {
TElemtype tdata;
struct _TNode * left, *right;
}TNode, *BiTree;
bool InitTree(BiTree *T);
bool TreeEmpty(BiTree T);
bool CreatTree(BiTree *T);
bool PreTraverse(BiTree T);
bool PreTraverse2(BiTree T);
bool InTraverse(BiTree T);
bool InTraverse2(BiTree T);
bool PostTraverse(BiTree T);
bool PostTraverse2(BiTree T);
void PrintTNode(TNode *p);
bool LevelTraverse(BiTree T);
TNode * LinkLeaf(BiTree *T);//将所有叶子结点从左至右连接起来
TNode * LinkLeaf2(BiTree *T);
void PrintLinkLeaf(TNode * head);
/*栈结构定义和操作声明*/
typedef struct {
TNode* ptr;
int mark;
}SElemtype;
typedef struct _SNode {
SElemtype sdata;
struct _SNode *next;
}SNode;
typedef struct {
SNode * top;
SNode * base;
}LinkStack;
bool InitStack(LinkStack *S);
bool StackEmpty(LinkStack S);
bool Push(LinkStack *S, BiTree * p);
bool Pop(LinkStack *S, BiTree *p);
SElemtype GetTop(LinkStack S);
bool PrintStack(LinkStack S);
/*队列结构定义和操作声明*/
typedef BiTree QElemType;
typedef struct _QNode {
QElemType qdata;
struct _QNode * next;
}QNode;
typedef struct {
QNode * front;
QNode *rear;
}QueueLink;
bool InitQueue(QueueLink *Q);
bool QueueEmpty(QueueLink Q);
bool EnQueue(QueueLink *Q,QElemType *q);
bool DeQueue(QueueLink *Q, QElemType *q);
bool IsTreeEqualStackTop(LinkStack S, TNode * treep)
{
return treep == ((S.top)->next->sdata).ptr;
}
bool MarkTop(LinkStack *S, int mark)
{
if (StackEmpty(*S))
return false;
(S->top->next->sdata).mark = mark;
return true;
}
/*以下是对栈的具体操作*/
bool InitStack(LinkStack *S)
{
if (S =&#