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);
    }
  • 相关阅读:
    VS调试技巧
    Git 分支
    WPF:如何高速更新Model中的属性
    Redis-4.0.11集群配置
    大压力下Redis参数调整要点
    统计UPD丢包工具
    查看Redis集群所有节点内存工具
    Redis集群命令行部署工具
    查看Redis集群主从对应关系工具
    Redis集群master选举时长测试
  • 原文地址:https://www.cnblogs.com/lvzhiqi/p/10952022.html
Copyright © 2011-2022 走看看