从键盘接收扩展先序序列,以二叉链表作为存储结构,建立二叉树。按先序遍历次序输出各结点的内容及相应的层次数,要求以二元组的形式输出,其所对应的输出结果为:(data,level)
data是二叉树结点数据域值,level是该结点所在的层次。
设根节点在第一层。输出的元素间不用间隔,()中都是英文字符
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char datatype;
typedef struct Node
{
datatype data;
struct Node *lchild;
struct Node *rchild;
}BiTNode, *BiTree;
typedef struct
{
BiTree da[1000];
int top;
}SeqStack;
SeqStack *InitStack()
{
SeqStack *s;
s = (SeqStack *)malloc(sizeof(SeqStack));
s->top = -1;
return s;
}
int StaIsEmpty(SeqStack *s)
{
if(s->top == -1)
return 1;
else
return 0;
}
int push(SeqStack *s, BiTree root)
{
BiTree p;
p = root;
if(s->top == 999)
return 0;
else {
s->top++;
s->da[s->top]=p;
}
}
void pop(SeqStack *s, BiTree *root)
{
BiTree p;
p = *root;
if(StaIsEmpty(s))
return;
else {
*root = s-> da[s->top];
s->top--;
}
}
void creat(BiTree *root)
{
char ch;
ch = getchar();
if(ch == '#') {
*root = NULL;
}
else {
*root = (BiTree) malloc (sizeof(BiTNode));
(*root) -> data = ch;
creat(&((*root)->lchild));
creat(&((*root)->rchild));
}
}
void preorder(BiTree root, int n)
{
if(root) {
printf("(%c,%d)",root->data,n);
preorder(root->lchild,n+1);
preorder(root->rchild,n+1);
}
}
void PreOrder(BiTree root)
{
SeqStack *s;
BiTree p;
s=InitStack();
p = root;
while(p != NULL || !StaIsEmpty(s)) {
while(p != NULL) {
printf("%c", p->data);
push(s,p);
p = p -> lchild;
}
if(!StaIsEmpty(s)) {
pop(s,&p);
p = p -> rchild;
}
}
}
void InOrder(BiTree root)
{
SeqStack *s;
BiTree p;
s=InitStack();
p = root;
while(p != NULL || !StaIsEmpty(s)) {
while(p!=NULL) {
push(s,p);
p = p -> lchild;
}
if(!StaIsEmpty(s)) {
pop(s,&p);
printf("%c",p->data);
p = p-> rchild;
}
}
}
int main()
{
int n;
BiTree root;
creat(&root);
preorder(root,n+1);
printf("\n");
return 0;
}