zoukankan      html  css  js  c++  java
  • 数据结构二叉树(实训报告)

    #include<stdio.h>
    #include<stdlib.h>
    typedef char TElemType;
    typedef struct node{
        TElemType data;       //结点数据 
        struct node *lchild,*rchild;   //左右子女指针 
    }BinTNode, *BinTree;    //二叉树定义 
    
    //创建二叉树
    void createBinTree_Pre(BinTNode *&T,TElemType pre[],int &n){
        TElemType ch = pre[n++];
        if(ch == ';') return; 
        if(ch != '#'){
            T = (BinTNode*) malloc (sizeof(BinTNode));   //递归根节点
            T->data=ch;
            createBinTree_Pre(T->lchild,pre,n);     //递归建立左子树
            createBinTree_Pre(T->rchild,pre,n);     //递归建立右子树 
        }else 
            T = NULL;     //否则建立空子树 
    
    };
    
    //以广义表的形式输出二叉树
    void PrintBinTree (BinTNode *T){
        if(T!=NULL){
            printf("%c",T->data);
            if(T->lchild!=NULL||T->rchild!=NULL){
                printf("(");
                PrintBinTree(T->lchild);
                printf(",");
                PrintBinTree(T->rchild);
                printf(")");
            }
        }
    } 
    
    //二叉树的总结点数
    int Nodenum(BinTNode *T){
        if(T == NULL){
            return 0;
        }else{
            return 1+Nodenum(T->lchild)+Nodenum(T->rchild);
        }
    } 
    
    //计算二叉树的高度
    int Height(BinTNode *T){
        if(T==NULL) return 0; //递归结束;空树高度为0 
        else{
            int i= Height(T->lchild);
            int j= Height(T->rchild);
            return (i<j)?j+1:i+1;
        } 
    }
    
    //二叉树的叶子结点数
    int Leafnum (BinTNode *T){
        if(!T){
            return 0;
        }else if((T->lchild == NULL)&&(T->rchild == NULL)){
            return 1;
        }else {
            return (Leafnum (T->lchild)+Leafnum (T->rchild));
        }
    }
    
    
    //输入结点找双亲结点 
    BinTNode *getParent (BinTNode *T,TElemType key){
        if((T->lchild!=NULL&&T->lchild->data==key)||(T->rchild!=NULL)&&T->rchild->data==key){
            return T;
        }else {
            getParent(T->lchild,key);
            getParent(T->rchild,key);
        }
        return NULL;
    } 
    
    //输入结点找左孩子和右孩子结点
    BinTNode *getNodenum(BinTNode *T,TElemType key){
        if(T != NULL&&T->data == key){
            return T;
        }else {
            getNodenum (T->lchild,key);
            getNodenum (T->rchild,key);
        }
        return NULL;
    } 
    
    main(){
        BinTree T;
        BinTree Parent,leftChild,rightChild;
        char key;
        BinTree Temp;
        char a[100]={'A','B','C','#','#','D','E','#','#','#','F','#','#',';'};
        int i=0;
        createBinTree_Pre(T,a,i);
        printf("二叉树用广义表表示为:");
        PrintBinTree(T);
        printf("
    二叉树的高度为:%d",Height(T));
        printf("
    二叉树的总结点为:%d",Nodenum(T));
        printf("
    二叉树的叶子结点为:%d",Leafnum(T));
        printf("
    请输入需要查找的双亲结点的结点:");
        scanf("%c",&key);
        getchar();
        Parent = getParent(T,key);
        printf("输入的节点的双亲点的数据是:%c
    ",Parent->data);
        printf("请输入需要查找左右孩子结点的结点:");
        scanf("%c",&key);
        getchar();
        Temp = getNodenum(T,key);
        leftChild = Temp->lchild;
        rightChild = Temp->rchild;
        printf("您输入的节点的左孩子节点数据是:%c
    ",leftChild->data);
        printf("您输入的节点的右孩子节点数据是:%c
    ",rightChild->data);
    }
  • 相关阅读:
    启动eclipse报错 Could not create the Java Virtual Machine
    网站优化-HTML关键词代码使用
    [转载]我们应该更依赖手机一点
    跨域问题
    我研制的操盘机器人今天继续大获全胜2017-03-01
    昨日买的股票今日大获全胜,今日买的毫发无损,操盘机器人年后至今仅一天失误,超强,雄起
    机器人战胜人类操盘手,我研制三年的成果
    年后连续5天开门红,机器人越战越勇
    在家附近散个步(新昌),调整一下情绪,明天就要上班了
    今天开门红,好兆头
  • 原文地址:https://www.cnblogs.com/lvzhiqi/p/10952022.html
Copyright © 2011-2022 走看看