7-5 求中序遍历序列的第一个结点值 (20 分)
设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并输出其中序遍历序列的第一个结点值。
输入格式:
第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。
输出格式:
输出该二叉树中序遍历序列的第一个结点值,若该点不存在则输出"null"。
输入样例:
在这里给出一组输入。例如:
2
AB#D##C##
ABD##E##C#F##
结尾无空行
输出样例:
在这里给出相应的输出。例如:
B
D
结尾无空行
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *nextleft;
struct BiTNode*nextright;
}BiTNode,*BiTree;
//创建二叉树
void Creat(BiTree *T){
char ch;
scanf("%c",&ch);
if(ch=='#')
{
*T=NULL;
}
else
{
*T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
Creat(&(*T)->nextleft);
Creat(&(*T)->nextright);
}
}
//中序遍历
char traverse1(BiTree T,int k)
{
int count=1;
char ch;
if(!T)
return '#';
else
{
if((ch=traverse1(T->nextleft,k))!='#')
return ch;
else if(count++==k)
return T->data;
else return traverse1(T->nextleft,k);
}
}
int main(void)
{
int n;
scanf("%d",&n);
while(n--){
char a;
BiTree T;
getchar();
Creat(&T);
a=traverse1(T,1);
if(a!='#')
{
printf("%c\n",a);
}
else{
printf("null\n");
}
}
return 0;
}
在输出中序遍历的第一个节点的值得时候,借鉴了别人的思路,还望采纳