数据结构树和二叉树实验报告
{
int num1,num2;
if (b==NULL)
return 0;
else if (b->lchild==NULL && b->rchild==NULL)
return 1;
else
{
num1=LeafNodes(b->lchild);
num2=LeafNodes(b->rchild);
return (num1+num2);
while (top>-1 || p!=NULL)
{
while (p!=NULL)
{
top++;
St[top]=p;
p=p->lchild;
}
if (top>-1)
{
p=St[top];
top--;
printf("%c ",p->data);
p=p->rchild;
}
}
printf("\n");
}
}
(5)输出二叉树b的结点个数;
(6)输出二叉树b的叶子结点个数。
2.编写一程序,实现二叉树的先序遍历、中序遍历和后序遍历的各种递归和非递归算法,以及层次遍历的算法。
三、实验预习容
二叉树存储构造,二叉树根本运算〔创立二叉树、寻找结点、找孩子结点、求高度、输出二叉树〕
三、实验结果与分析
7-1
#include <stdio.h>
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
void DispBTNode(BTNode *b)
{
if (b!=NULL)
{
printf("%c",b->data);
if (b->lchild!=NULL || b->rchild!=NULL)
{
return p->rchild;
}
int BTNodeDepth(BTNode *b)
{
int lchilddep,rchilddep;
if (b==NULL)
return(0);
else
{
lchilddep=BTNodeDepth(b->lchild);
rchilddep=BTNodeDepth(b->rchild);
{
if (b!=NULL)
{
InOrder(b->lchild);
printf("%c ",b->data);
InOrder(b->rchild);
}
}
void InOrder1(BTNode *b)
{
BTNode *St[Ma*Size],*p;
int top=-1;
if (b!=NULL)
{
p=b;
return (lchilddep>rchilddep)" (lchilddep+1):(rchilddep+1);
}
}
void DispBTNode(BTNode *b)
{
if (b!=NULL)
{
printf("%c",b->data);
if (b->lchild!=NULL || b->rchild!=NULL)
p=FindNode(b,'H');
if (p!=NULL)
{
lp=LchildNode(p);
if (lp!=NULL)
printf("左孩子为%c ",lp->data);
else
printf("无左孩子 ");
rp=RchildNode(p);
if (rp!=NULL)
printf("右孩子为%c",rp->data);
{
BTNode *St[Ma*Size],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while (ch!='\0')
{
switch(ch)
{
case '(':top++;St[top]=p;k=1; break;
case ')':top--;break;
if (b->lchild!=NULL)
{
rear++;
Qu[rear].p=b->lchild;
Qu[rear].lno=lnum+1;
}
if (b->rchild!=NULL)
{
rear++;
Qu[rear].p=b->rchild;
Qu[rear].lno=lnum+1;
}
}
ma*=0;lnum=1;i=1;
while (i<=rear)
{
n=0;
while (i<=rear && Qu[i].lno==lnum)
{
n++;i++;
}
lnum=Qu[i].lno;
if (n>ma*) ma*=n;
}
return ma*;
}
else
return 0;
}
int Nodes(BTNode *b)
{
int num1,num2;
case ',':k=2; break;
default:p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if (b==NULL)
b=p;
else
{
switch(k)
{
case 1:St[top]->lchild=p;break;
case ')':来自op--;break;case ',':k=2; break;
default:p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if (b==NULL)
b=p;
else
{
switch(k)
} Qu[Ma*Size];
int front,rear;
int lnum,ma*,i,n;
front=rear=0;
if (b!=NULL)
{
rear++;
Qu[rear].p=b;
Qu[rear].lno=1;
while (rear!=front)
{
front++;
b=Qu[front].p;
lnum=Qu[front].lno;
if (b==NULL)
return 0;
else if (b->lchild==NULL && b->rchild==NULL)
return 1;
else
{
num1=Nodes(b->lchild);
num2=Nodes(b->rchild);
return (num1+num2+1);
}
}
int LeafNodes(BTNode *b)
BTNode *p;
int flag,top=-1;
if (b!=NULL)
{
do
{
while (b!=NULL)
{
top++;
St[top]=b;
b=b->lchild;
}
p=NULL;
flag=1;
while (top!=-1 && flag)
{
b=St[top];
if (b->rchild==p)
{
printf("(");
DispBTNode(b->lchild);
if (b->rchild!=NULL) printf(",");
DispBTNode(b->rchild);
printf(")");
}
}
}
void PreOrder(BTNode *b)
{
if (b!=NULL)
{
printf("%c ",b->data);
}
}
void main()
{
BTNode *b,*p,*lp,*rp;;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("输出二叉树:");DispBTNode(b);printf("\n");
printf("'H'结点:");
}
7-2
#include <stdio.h>
#include <malloc.h>
#define Ma*Size 100