zoukankan      html  css  js  c++  java
  • 创建二叉树

    全部代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    typedef struct node
    {
        int nValue;
        struct node *pLeft;
        struct node *pRight;
    }BiTree;
    
    BiTree *CreateBiTree(void)
    {
        BiTree *pRoot = NULL;
    
        //
        pRoot = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot)
        {
            printf("pRoot空间分配失败!
    ");
            exit(-1);
        }
        pRoot->nValue = 1;
        pRoot->pLeft = NULL;
        pRoot->pRight = NULL;
    
        //根的左
        pRoot->pLeft = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot->pLeft)
        {
            printf("pRoot->pLeft空间分配失败!
    ");
            exit(-1);
        }
        pRoot->pLeft->nValue = 2;
        pRoot->pLeft->pLeft = NULL;
        pRoot->pLeft->pRight = NULL;
    
        //根的右
        pRoot->pRight = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot->pRight)
        {
            printf("pRoot->pRight空间分配失败!
    ");
            exit(-1);
        }
        pRoot->pRight->nValue = 3;
        pRoot->pRight->pLeft = NULL;
        pRoot->pRight->pRight = NULL;
    
        //左的左
        pRoot->pLeft->pLeft = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot->pLeft->pLeft)
        {
            printf("pRoot->pLeft->pLeft空间分配失败!
    ");
            exit(-1);
        }
        pRoot->pLeft->pLeft->nValue = 4;
        pRoot->pLeft->pLeft->pLeft = NULL;
        pRoot->pLeft->pLeft->pRight = NULL;
    
        //左的右
        pRoot->pLeft->pRight = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot->pLeft->pRight)
        {
            printf("pRoot->pLeft->pRight空间分配失败!
    ");
            exit(-1);
        }
        pRoot->pLeft->pRight->nValue = 5;
        pRoot->pLeft->pRight->pLeft = NULL;
        pRoot->pLeft->pRight->pRight = NULL;
    
        //右的左
        pRoot->pRight->pLeft = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == pRoot->pRight->pLeft)
        {
            printf("pRoot->pRight->pLeft空间分配失败!
    ");
            exit(-1);
        }
        pRoot->pRight->pLeft->nValue = 6;
        pRoot->pRight->pLeft->pLeft = NULL;
        pRoot->pRight->pLeft->pRight = NULL;
    
        return pRoot;
    }
    
    //递归创建二叉树
    void RecCreateBiTree(BiTree **ppRoot)
    {
        int nNum;
    
        assert(ppRoot!=NULL);
    
        //输入节点的值
        scanf("%d", &nNum);
    
        //检测是否是结束标志
        if(0 == nNum)
        {
            return;
        }
    
        *ppRoot = (BiTree *)malloc(sizeof(BiTree));
        if(NULL == *ppRoot)
        {
            printf("*ppRoot空间分配失败!");
            exit(-1);
        }
        (*ppRoot)->nValue = nNum;
        (*ppRoot)->pLeft = NULL;
        (*ppRoot)->pRight = NULL;
    
        //处理当前节点的左和右
        RecCreateBiTree(&(*ppRoot)->pLeft);
        RecCreateBiTree(&(*ppRoot)->pRight);
    }
    
    //前序遍历
    void PreOrderTraversal(BiTree *pRoot)
    {
        if(NULL == pRoot)
        {
            return;
        }
    
        printf("%d ", pRoot->nValue);
        PreOrderTraversal(pRoot->pLeft);
        PreOrderTraversal(pRoot->pRight);
    }
    
    //中序遍历
    void MidOrderTraversal(BiTree *pRoot)
    {
        if(NULL == pRoot)
        {
            return;
        }
    
        MidOrderTraversal(pRoot->pLeft);
        printf("%d ", pRoot->nValue);
        MidOrderTraversal(pRoot->pRight);
    }
    
    //后序遍历
    void LastOrderTraversal(BiTree *pRoot)
    {
        if(NULL == pRoot)
        {
            return;
        }
    
        LastOrderTraversal(pRoot->pLeft);
        LastOrderTraversal(pRoot->pRight);
        printf("%d ", pRoot->nValue);
    }
    
    int main(void)
    {
        BiTree *pRoot = CreateBiTree();
        PreOrderTraversal(pRoot);
        printf("
    ");
        MidOrderTraversal(pRoot);
        printf("
    ");
        LastOrderTraversal(pRoot);
    
        return 0;
    }
  • 相关阅读:
    POJ 3458 Colour Sequence(简单题)
    Cygwin下vim按方向键出现ABCD;
    算法之旅——归并排序
    poj 2769 Reduced ID Numbers(memset使用技巧)
    Restlet+Fastjson 高速构建轻量级 Java RESTful Webservice
    poj 1659 Frogs&#39; Neighborhood (度序列)
    PHP监測memcache服务端的执行状况
    机器学习之倚门回首嗅青梅
    Threejs 官网
    sqlserver安全加固
  • 原文地址:https://www.cnblogs.com/chen-cai/p/7806003.html
Copyright © 2011-2022 走看看