今天给各位分享c语言创建整数二叉树的知识,其中也会对c语言创建一个二叉树进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、c语言 二叉树的建立2、求数据结构(C语言版)建立二叉树的代码~~急~~谢谢了3、如何用C语言创建二叉树4、c语言数据结构:怎么建立一个二叉树?
c语言 二叉树的建立
根据二叉树的父节点和子节点的关系来创建
比如,父节点的编号是1,那么左子节点的编号就是2,右子节点的编号就是3
关系
父节点编号为i,则左子节点编号为2*i,右子节点编号为2*i+1
然后按照从小到大的顺序赋值就行了
比如操作 先i=1;node[1]=1,根节点赋值
再node[1*2]=node[2]=2;在node[1*2+1]=node[3]=3;
再i=2;node[2*2]=node[4]=4;node[2*2+1]=node[5]=-1;
再i=3;node[3*2]=node[6]=5…
。。依次下去,发现没,可以用一个数组来存,正好是按照层次遍历的顺序建立的,i不代表层次,具体有多少层用log2(n)+1来求,n就是你数组a里面的个数
整个创建过程就是这样,
假设a数组的个数为n,你的是7
node[1]=a[0];//根
int j=1;
for(i=1;;i++)
{
if(jn)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(jn)
node[i*2+1]=a[j++];
else break;
}
原代码:
#include iostream
#includecmath
void buildTree(int node[],int a[],int n)//建树
{
if(n==0)return;//原数组为空
node[1]=a[0];//根
int j=1;
for(int i=1;;i++)
{
if(jn)
node[i*2]=a[j++];
else break;//原数组里面已经没有数了
if(jn)
node[i*2+1]=a[j++];
else break;
}
}
void show(int node[],int n)//按层显示,同一层以空格隔开
{
int e=0,h=0;
for(int i=1;i=n;i++)
{
printf(“%d “,node[i]);
h++;
if((int)pow(2,e)==h)
}
}
void main()
{
int n,tree[1000],a[1000];
scanf(“%d”,n);//原来数组的个数
for(int i=0;in;i++)scanf(“%d”,a[i]);
buildTree(tree,a,n);
show(tree,n);
}
求数据结构(C语言版)建立二叉树的代码~~急~~谢谢了
BT.H文件
#include
stdio.h
#include
malloc.h
#include
conio.h
#define
TRUE
1
#define
FALSE
#define
ERROR
#define
OK
1
#define
Stack_Size
50
#define
NUM
50
#define
MAXSIZE
50
//队列的最大长度
//定义二叉树
typedef
char
DataType;
typedef
struct
Node
{
DataType
data;
struct
Node
*LChild;
struct
Node
*RChild;
}BiTNode,
*BiTree;
//定义stack
typedef
BiTree
StackElementType;
typedef
struct
{
StackElementType
elem[Stack_Size];
int
top;
}SeqStack;
//定义队列
typedef
BiTree
QueueElementType;
typedef
struct
{
QueueElementType
element[MAXSIZE];
int
front;
int
rear;
}SeqQueue;
//队列的抽象
void
InitQueue(SeqQueue
*Q)
{
Q-front=Q-rear=0;
}
int
EnterQueue(SeqQueue
*Q,
QueueElementType
x)
{
if((Q-rear+1)%MAXSIZE==Q-front)
return(FALSE);
Q-element[Q-rear]=x;
Q-rear=(Q-rear+1)%MAXSIZE;
return(TRUE);
}
如何用C语言创建二叉树
#includestdio.h
typedef char TElemType;
typedef struct BiTNode /*结点定义*/
{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;
BiTNode *CreateBiTree()
{
char c;
BiTNode *Root;
scanf(“%c”,c);
if(c==’@’) Root=NULL;
else{
Root=(BiTNode *)malloc(sizeof(BiTNode));
Root-data=c;
Root-lchild=CreateBiTree();
Root-rchild=CreateBiTree();
}
return(Root);
}
void PrintTree(BiTree T,int h)
{
int i;
if (T){
PrintTree(T-rchild,h+1);
for(i=0;ih;i++) printf(” “);
printf(“%c\n”,T-data);
PrintTree(T-lchild,h+1);
}
}
main( )
{
BiTNode* Root;
Root=CreateBiTree();
PrintTree(Root,0);
return 0;
}
c语言数据结构:怎么建立一个二叉树?
只要将一个二叉树用“括号表示法”表示出来,然后,用链式存储结构将其各个结点存储就可以了,也就是输入一个二叉树。最后,用中序遍历输出!
typedef struct node
{ ElemType data;
struct node *lchild,*rchild;
} BTNode;
//创建一个二叉树;
void CreateBTNode(BTNode * b,char *str)
{ BTNode *St[MaxSize],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;//建立的二叉树初始时为空
ch=str[j];
while (ch!=’\0′) //str未扫描完时循环
{ switch(ch)
{
case ‘(‘:top++;St[top]=p;k=1; break;
//为左孩子结点
case ‘)’:top–;break;
case ‘,’:k=2; break;
//为孩子结点右结点
default:
p=(BTNode *)malloc(sizeof(BTNode));
p-data=ch;p-lchild=p-rchild=NULL;
if (b==NULL) ///p为二叉树的根结点
b=p;
else //已建立二叉树根结点
{ switch(k)
{
case 1:St[top]-lchild=p;break;
case 2:St[top]-rchild=p;break;
}
}
}
j++;ch=str[j];
}
}
//中序遍历输出;
void InOrder(BTNode *b)
{ if (b!=NULL)
{ InOrder(b-lchild);
printf(“%c “,b-data); //访问根结点
InOrder(b-rchild);
}
}
OK!
顺便发一份给你,注意接收!
c语言创建整数二叉树的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言创建一个二叉树、c语言创建整数二叉树的信息别忘了在本站进行查找喔。