需成型的实验报告,邮箱是zhang-yidou@163.com
万分感谢!
数据结构实验报告--求二叉树结点求解的实验报告,急……
答案:2 悬赏:30 手机版
解决时间 2021-02-13 01:46
- 提问者网友:斑駁影
- 2021-02-12 01:48
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 2021-02-12 03:15
#include <stdio.h>//头文件
#include <stdlib.h>
#include <malloc.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;//定义结点类型
typedef struct QNode
{
BiTNode data;
struct QNode *next;
} //定义队列的节点类型
QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}
LinkQueue;//队列
void InitQueue(LinkQueue *Q)//创建队列
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->front->next=NULL;
}
void EnQueue(LinkQueue *Q,BiTNode e)//将元素入队
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));//为结点开辟空间
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
BiTNode DeQueue(LinkQueue *Q)//将元素出列并返回元素的值。
{
BiTNode e;QueuePtr p;
p=Q->front->next;
e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);//释放节点
return (e);
}
int QueueEmpty(LinkQueue *Q)//判断队列是否为空
{
if(Q->front==Q->rear )
return 1;
else
return 0;
}
BiTree CreateBiTree()//创建树
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间
T->data=p;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return (T);
}
void PreOrder(BiTree T)//先序
{
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)//中序
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)//后序
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
void LevelOrder(BiTree T)//层次遍历
{
LinkQueue Q; BiTNode p;
InitQueue(&Q);
EnQueue(&Q,*T);
while(!QueueEmpty(&Q))
{
p = DeQueue(&Q);
printf("%c",p.data);
if(p.lchild!=NULL)
EnQueue(&Q,*(p.lchild));
if(p.rchild!=NULL)
EnQueue(&Q,*(p.rchild));
}
}
int Depth(BiTree T)
{
int num1,num2;
if(T==NULL)
return(0);
num1=Depth(T->lchild);
num2=Depth(T->rchild);
if(num1>num2)
return(num1+1);
else
return(num2+1);
}
void main()//主函数
{
BiTree Ta;int num;
Ta=CreateBiTree();
printf("先序遍历:");
printf("\n");
PreOrder(Ta);
printf("\n");
printf("中序遍历:");
printf("\n");
InOrder(Ta);
printf("\n");
printf("后序遍历:");
printf("\n");
PostOrder(Ta);
printf("\n");
printf("层次遍历:");
printf("\n");
LevelOrder(Ta);
printf("\n");
num=Depth(Ta);
printf("深度为:%d",num);
}
为你量身定做的,开始要创建树,如果不会输入可以问我哦。
#include <stdlib.h>
#include <malloc.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;//定义结点类型
typedef struct QNode
{
BiTNode data;
struct QNode *next;
} //定义队列的节点类型
QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}
LinkQueue;//队列
void InitQueue(LinkQueue *Q)//创建队列
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->front->next=NULL;
}
void EnQueue(LinkQueue *Q,BiTNode e)//将元素入队
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));//为结点开辟空间
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
BiTNode DeQueue(LinkQueue *Q)//将元素出列并返回元素的值。
{
BiTNode e;QueuePtr p;
p=Q->front->next;
e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);//释放节点
return (e);
}
int QueueEmpty(LinkQueue *Q)//判断队列是否为空
{
if(Q->front==Q->rear )
return 1;
else
return 0;
}
BiTree CreateBiTree()//创建树
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间
T->data=p;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return (T);
}
void PreOrder(BiTree T)//先序
{
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree T)//中序
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);
}
}
void PostOrder(BiTree T)//后序
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
void LevelOrder(BiTree T)//层次遍历
{
LinkQueue Q; BiTNode p;
InitQueue(&Q);
EnQueue(&Q,*T);
while(!QueueEmpty(&Q))
{
p = DeQueue(&Q);
printf("%c",p.data);
if(p.lchild!=NULL)
EnQueue(&Q,*(p.lchild));
if(p.rchild!=NULL)
EnQueue(&Q,*(p.rchild));
}
}
int Depth(BiTree T)
{
int num1,num2;
if(T==NULL)
return(0);
num1=Depth(T->lchild);
num2=Depth(T->rchild);
if(num1>num2)
return(num1+1);
else
return(num2+1);
}
void main()//主函数
{
BiTree Ta;int num;
Ta=CreateBiTree();
printf("先序遍历:");
printf("\n");
PreOrder(Ta);
printf("\n");
printf("中序遍历:");
printf("\n");
InOrder(Ta);
printf("\n");
printf("后序遍历:");
printf("\n");
PostOrder(Ta);
printf("\n");
printf("层次遍历:");
printf("\n");
LevelOrder(Ta);
printf("\n");
num=Depth(Ta);
printf("深度为:%d",num);
}
为你量身定做的,开始要创建树,如果不会输入可以问我哦。
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-02-12 03:22
根节点是画出图来位于最顶端的节点,叶节点则是最底端的节点
深度为n的满二叉树第n层的节点数也就是叶节点数=2^(n-1)=16
任何一颗二叉树中度为2的节点数始终比度为0的节点数少1,所以叶子节点数=5+1=6个
度为n就是说这个节点有n条通向下一个节点的路径,对于二叉树,任意一个节点只能有1条,2条或0条路径或者说成子节点。
给你个图就清楚了:
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯