1.c ������Դ��
2.数据结构中用c语言建立二叉树的树源树程序
3.如何才能C语言编程实现求一棵二叉树的结点总数?急!!树源树!树源树urp教务系统源码
c ������Դ��
#include<stdio.h>#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *lchild,*rchild;
}LNode,*TLNode;
void create(TLNode * Tree){ //创建
ElemType e;
scanf("%d",&e);
if(e==0)
*Tree=NULL;
else{
(*Tree)=(TLNode)malloc(sizeof(LNode));
(*Tree)->data=e;
printf("input %d lchild: ",e);
create(&(*Tree)->lchild);
printf("input %d rchild: ",e);
create(&(*Tree)->rchild);
}
}
void print1(TLNode Tree){ //先序遍历
if(Tree!=NULL){
printf("%d-",Tree->data);
print1(Tree->lchild);
print1(Tree->rchild);
}
}
void print2(TLNode Tree){ //中序遍历
if(Tree!=NULL){
print2(Tree->lchild);
printf("%d-",Tree->data);
print2(Tree->rchild);
}
}
void print3(TLNode Tree){ //后序遍历
if(Tree!=NULL){
print3(Tree->lchild);
print3(Tree->rchild);
printf("%d-",Tree->data);
}
}
int leaf=0; //求叶子节点数
int depth(TLNode Tree){ //深度
int s1,s2;
if(Tree==NULL)
return 0;
else{
s1=depth(Tree->lchild);
s2=depth(Tree->rchild);
if(s1==0 && s2==0) leaf++;
return (s1>s2?s1:s2)+1;
}
}
int Cnode(TLNode Tree){ //总结点
int s1,s2;
if(Tree==NULL)
return 0;
else{
s1=Cnode(Tree->lchild);
s2=Cnode(Tree->rchild);
return s1+s2+1;
}
}
void main(){
TLNode Tree;
printf("input 根节点: ");
create(&Tree);
printf("先序遍历:");
print1(Tree);
printf("中序遍历");
print2(Tree);
printf("后序遍历");
print3(Tree);
printf("\n深 度:%d \n",depth(Tree));
printf("总结点数:%d \n",Cnode(Tree));
printf("叶子结点数:%d\n",leaf);
}
数据结构中用c语言建立二叉树的程序
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
typedef struct Bnode //二叉树节点类型
{
int m;
struct Bnode *Lchild,*Rchild;
}Btnode, *BTptr;
typedef struct Dnode //队列节点类型
{
Btnode *pr;
struct Dnode *next;
}Qnode,*Qlink;
typedef struct //q节点类型
{
Qnode *front,*rear;
}linkqueue;
void Lcreatqueue(linkqueue *q) //创建队列
{
q->front=(Qlink)malloc(sizeof(Qnode));
q->front->next=NULL;
q->rear=q->front;
}
Btnode *Getqtop(linkqueue *Q)
{
return(Q->front->pr);
}
void Enqueue(linkqueue *q,Btnode *e) //入队
{
Qlink p;
p=(Qlink)malloc(sizeof(Qnode));
p->pr=e;
p->next=NULL;
if(q->front==NULL)q->front=p;
else
q->rear->next=p;
q->rear=p;
}
Btnode *DeQueue(linkqueue *q) //出队
{ Qlink p;
if(q->front==q->rear) return(NULL);
else
{
p=q->front;
q->front=p->next;
free(p);
return(q->front->pr);
}
}
BTptr creatbtree(BTptr BT)
{
int i=1;
linkqueue *Q=NULL;
BTptr q;
//BTptr s;
Btnode *p,*Del;
Q=(linkqueue *)malloc(sizeof(linkqueue));
Lcreatqueue(Q);
Q->rear=Q->front=NULL;
BT=NULL;
while(i<=n)
{ p=NULL;
p=(BTptr)malloc(sizeof(Btnode));
p->Lchild=p->Rchild=NULL;
p->m=i;
Enqueue(Q,p);
if(i==1)BT=p;
else
{
q=Getqtop(Q); //q指向二叉树的指针
if(p&&q)
if(i%2==0)q->Lchild=p;
else q->Rchild=p;
if(i%2==1) Del=DeQueue(Q);
}
i++;
}
return(BT);
}
main()
{ BTptr *p=NULL;
p=creatbtree(p);
}
还是希望你自己会去编一遍
如何才能C语言编程实现求一棵二叉树的结点总数?急!!树源树指标知王源码!树源树拖拽建站cms源码
(1)求结点数的树源树递归定义为:
若为空树,结点数为0
若只有根结点,树源树则结点数为1;
否则,树源树结点数为根结点的树源树左子树结点数+右子树结点数+1
(2)求叶子数的递归定义为:
若为空树,叶子数为0
若只有根结点,树源树则叶子数为1;
否则,树源树叶子数为根结点的树源树溯源码燕窝出左子树叶子数+右子树叶子数
typedef char DataType;//定义DataType类型
typedef struct node{
DataType data;
struct node *lchild, *rchild;//左右孩子子树
}BinTNode; //结点类型
typedef BinTNode *BinTree;//二叉树类型
int Node(BinTree T)
{ //算结点数
if(T)
if (T-> lchild==NULL )&&( T --> rchild==NULL )
return 1;
else return Node(T-> lchild ) +Node ( T --> rchild )+1;
else return 0;
}
int Leaf(BinTree T)
{ //算叶子数
if(T)
if (T-> lchild==NULL )&&( T --> rchild==NULL )
return 1;
else return Leaf(T-> lchild ) +Node ( T --> rchild );
else return 0;
}