皮皮网

皮皮网

【vb NC源码】【如何快速买源码】【ros源码api查询】c 二叉树源码_c语言的二叉树

时间:2024-12-26 00:21:45 分类:知识

1.c ������Դ��
2.数据结构中用c语言建立二叉树的树源树程序
3.如何才能C语言编程实现求一棵二叉树的结点总数?急!!树源树!树源树vb NC源码

c  二叉树源码_c语言的树源树二叉树

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语言编程实现求一棵二叉树的结点总数?急!!树源树如何快速买源码!树源树ros源码api查询

       (1)求结点数的树源树递归定义为:

        若为空树,结点数为0

        若只有根结点,树源树则结点数为1;

        否则,树源树结点数为根结点的树源树左子树结点数+右子树结点数+1

        (2)求叶子数的递归定义为:

        若为空树,叶子数为0

        若只有根结点,树源树则叶子数为1;

        否则,树源树叶子数为根结点的树源树minecraft源码分析村民左子树叶子数+右子树叶子数

        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;

        }