如图所示,二叉树结点为7个,如果用递归或者基于栈的方式,创建函数应该怎么去编写呢?


#include<stdio.h>
#define max 7
#define OK 1
typedef struct SqBiTree
{
char node[max+1];
}
SqBiTree;
//SqBiTree T;
int CreatBitree(SqBiTree *T)
{
T->node[0]=-1;
printf("输入二叉树:");
for(int i=1; i<=max; i++)
{
scanf("%c",&T->node[i]);
}
//put(T);
return OK;
}
void put(SqBiTree T)
{
for(int i=1; i<=max; i++)
printf("%c ",T.node[i]);
printf("\n");
}
int Nonleafnode(SqBiTree T)
{
int count=0;
for(int i=1; i<=max; i++)
{
if(T.node[i]!='.')
{
if(i*2<=max||i*2+1<=max)
{
count++;
//printf("%c\n",T.node[i]);
}
}
}
return count;
}
void Nonemptynodewithoutparents(SqBiTree T)
{
for(int i=1; i<=max; i++)
{
if(T.node[i]!='.'&&(T.node[i/2]=='.'&&T.node[(i-1)/2]=='.'))
{
printf("出现无双亲的非空节点%c\n",T.node[i]);
}
}
}
int main()
{
SqBiTree T;
int oper=1;
while(oper!=-1)
{
printf("1.建立二叉树\n");
printf("2.打印无双亲的非空节点\n");
printf("3.打印非叶子节点数目\n");
scanf("%d",&oper);
getchar();
switch (oper)
{
case 1:
CreatBitree(&T);
break;
case 2:
Nonemptynodewithoutparents(T);
break;
case 3:
printf("非叶子节点数目:%d\n",Nonleafnode(T));
break;
}
}
// CreatBitree(&T);
//Nonemptynodewithoutparents(T);
//put(T);
return 0;
}