完全二叉树 数据结构第一行有2个整数n(0 < n < 1024)和r(1
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/13 07:08:51
完全二叉树 数据结构
第一行有2个整数n(0 < n < 1024)和r(1
第一行有2个整数n(0 < n < 1024)和r(1
#include "math.h"
#include "string.h"
#include "stdlib.h"
/*
判断某个节点num是否属于二叉树a[]内的节点,其中len是二叉树数组表示的所有节点个数,
包括左右孩子为空的情况,*index是节点num在二叉树数组中的位置.
*/
int judge(int a[], int len,int *index, int num)
{
for (int i=0; i<len; i++)
{
if (a[i] == num)
{
*index = i;
return 1;
}
}
return 0;
}
/*
以数组形式创建二叉树,返回数组指针,其中参数NodeNum是二叉树内非空节点个数
*/
int * CreateBinTree(int *NodeNum)
{
int *a=NULL;
int x=0,y=0;
scanf("%d %d",&x,&y);
a = (int *)malloc(sizeof(int)*(x*2+1));
*NodeNum = x;
memset(a,0,sizeof(int)*(x*2+1));
a[0] = y;
int n = x;
for (int i=1; i<n; i++)
{
scanf("%d %d",&x,&y);
int index=0;
if ( judge(a,n,&index,x) )
{
a[ (index)*2+1 ] = y;
}
else if ( judge(a,n,&index,y) )
{
a[ (index)*2+2 ] = x;
}
}
return a;
}
/*
判断是否完全二叉树的依据是某个节点左右孩子不为空,或者全部为空
*/
int isBinTree(int a[], int NodeNum)
{
for (int i=0; i<(2*NodeNum+1); i++ )
{
if (a[i] != 0)
{
if ( (a[2*i+1]==0)&&(a[2*i+2]!=0) )
{
return 0;
}
if ((a[2*i+1]!=0)&&(a[2*i+2]==0))
{
return 0;
}
}
}
}
int main(int argc, char* argv[])
{
int *a=NULL;
int NodeNum=0;
a = CreateBinTree(&NodeNum);
printf("\nShow:");
for (int i=0; i<2*NodeNum+1; i++)
{
printf("%d ",a[i]);
}
int rt = isBinTree(a,NodeNum);
if (rt)
{
printf("\nyes!");
}
else
{
printf("\nno!");
}
printf("\n");
return 0;
}
#include "string.h"
#include "stdlib.h"
/*
判断某个节点num是否属于二叉树a[]内的节点,其中len是二叉树数组表示的所有节点个数,
包括左右孩子为空的情况,*index是节点num在二叉树数组中的位置.
*/
int judge(int a[], int len,int *index, int num)
{
for (int i=0; i<len; i++)
{
if (a[i] == num)
{
*index = i;
return 1;
}
}
return 0;
}
/*
以数组形式创建二叉树,返回数组指针,其中参数NodeNum是二叉树内非空节点个数
*/
int * CreateBinTree(int *NodeNum)
{
int *a=NULL;
int x=0,y=0;
scanf("%d %d",&x,&y);
a = (int *)malloc(sizeof(int)*(x*2+1));
*NodeNum = x;
memset(a,0,sizeof(int)*(x*2+1));
a[0] = y;
int n = x;
for (int i=1; i<n; i++)
{
scanf("%d %d",&x,&y);
int index=0;
if ( judge(a,n,&index,x) )
{
a[ (index)*2+1 ] = y;
}
else if ( judge(a,n,&index,y) )
{
a[ (index)*2+2 ] = x;
}
}
return a;
}
/*
判断是否完全二叉树的依据是某个节点左右孩子不为空,或者全部为空
*/
int isBinTree(int a[], int NodeNum)
{
for (int i=0; i<(2*NodeNum+1); i++ )
{
if (a[i] != 0)
{
if ( (a[2*i+1]==0)&&(a[2*i+2]!=0) )
{
return 0;
}
if ((a[2*i+1]!=0)&&(a[2*i+2]==0))
{
return 0;
}
}
}
}
int main(int argc, char* argv[])
{
int *a=NULL;
int NodeNum=0;
a = CreateBinTree(&NodeNum);
printf("\nShow:");
for (int i=0; i<2*NodeNum+1; i++)
{
printf("%d ",a[i]);
}
int rt = isBinTree(a,NodeNum);
if (rt)
{
printf("\nyes!");
}
else
{
printf("\nno!");
}
printf("\n");
return 0;
}
数据结构的线索二叉树,为什么在有n个结点的二叉链表中必定存在n+1个空链域
数据结构题目:在有n个叶子结点的完全二叉树中,最多有多少个结点?
湖北第二师范《数据结构》题,1.在n个结点的二叉树中,结点有m个树叶,则一定有 个度
完全二叉树共有2*n-1个结点,那么他的叶结点怎么算?
完全二叉树有2*n-1 的节点,则它的叶子节点数为?
Input输入分为两部分:第一部分是第一行,有N+1个整数,第一个正整数为N(N
数据结构 一棵完全二叉树,第8层含有5个结点,则这棵二叉树的叶子结点个数为?
三道数据结构题.1、由85个节点构成的完全二叉树,其深度为:______,其中第6层的节点数为____个2、关键字1,2
数据结构编程题,第一行输入一个正整数,表示n(1
c语言怎么写第一行是一个整数N,代表有N组测试数据,接下来是N行,每行有两个整数A和B.
二叉树有n个度为2的节点,该二叉树中叶子结点个数为多少
有n个结点的二叉树共有多少种?