#include <stdio.h>
#define M 100
typedef struct tree{
char data;
struct tree *lchild,*rchild;
}bintree; /*定义树*/
typedef bintree *tree;
//ABD#E##FG###C##
/*前序遍历建树*/
tree createTree()
{ tree t;
char c=getchar();
if(c=='#') return NULL;
else
{ t=(tree)malloc(sizeof(bintree));
t->data=c;
t->lchild=createTree();
t->rchild=createTree();
}
return t;
}
void preorder(tree t)/*非递归前序遍历*/
{ tree stack[M];
int top=0;
while(top||t)
{ if(t!=NULL)
{ printf("%c",t->data);
stack[top++]=t;
t=t->lchild;
}
else
{ t=stack[--top];
t=t->rchild;
}
}
}
tree findTail(tree t)
{ tree p;
if(t==NULL) return t;
p=t;
while(p->rchild||p->lchild)
{ if(p->rchild!=NULL) p=p->rchild;
else if(p->lchild!=NULL) p=p->lchild;
}
return p;
}
int main()
{
tree t,t1;
t=createTree();
printf("\n前序遍历结果为:\n");
preorder(t);
printf("\n\n前序遍历首点为:%c",t->data);
t1=findTail(t);
printf("\n\n前序遍历尾点:%c",t1->data);
return 0;
}
#define M 100
typedef struct tree{
char data;
struct tree *lchild,*rchild;
}bintree; /*定义树*/
typedef bintree *tree;
//ABD#E##FG###C##
/*前序遍历建树*/
tree createTree()
{ tree t;
char c=getchar();
if(c=='#') return NULL;
else
{ t=(tree)malloc(sizeof(bintree));
t->data=c;
t->lchild=createTree();
t->rchild=createTree();
}
return t;
}
void preorder(tree t)/*非递归前序遍历*/
{ tree stack[M];
int top=0;
while(top||t)
{ if(t!=NULL)
{ printf("%c",t->data);
stack[top++]=t;
t=t->lchild;
}
else
{ t=stack[--top];
t=t->rchild;
}
}
}
tree findTail(tree t)
{ tree p;
if(t==NULL) return t;
p=t;
while(p->rchild||p->lchild)
{ if(p->rchild!=NULL) p=p->rchild;
else if(p->lchild!=NULL) p=p->lchild;
}
return p;
}
int main()
{
tree t,t1;
t=createTree();
printf("\n前序遍历结果为:\n");
preorder(t);
printf("\n\n前序遍历首点为:%c",t->data);
t1=findTail(t);
printf("\n\n前序遍历尾点:%c",t1->data);
return 0;
}