• 完全二叉树的创建


    创建二叉树:输入0结束

    void CreateTree(BinaryTree **pTree)
    {
        //输入数值
        int nNum;
        scanf("%d",&nNum);
    
        if(nNum == 0)return;
    
        *pTree = (BinaryTree*)malloc(sizeof(BinaryTree));
        (*pTree)->nValue = nNum;
        (*pTree)->pLeft = NULL;
        (*pTree)->pRight = NULL;
    
        //
        CreateTree(&((*pTree)->pLeft));
        //
        CreateTree(&((*pTree)->pRight));
    }

    创建二叉树:输入#结束,需要注意的是%c读入空格和换行,所以输入的时候要一连串输入,

    void  CreateTree(Tree** tmp)
    {
        char num = 0;
        scanf("%c",&num);
        if(num == '#') return;
        *tmp = (Tree*)malloc(sizeof(Tree));
        (*tmp)->val = num - '0';
        (*tmp)->pleft = NULL;
        (*tmp)->pright = NULL;
        CreateTree(&((*tmp)->pleft));
        CreateTree(&((*tmp)->pright));
    }

    测试数据:124##5##36###     

    前序输出结果为:124536

    函数为前序插入,只能为前序插入。因为必须确定根才能,建立左孩子和右孩子

    将数组元素作为前序遍历的结果建立二叉树:

    根从0开始,第2*i+1个节点为它的左孩子,2*i+2为它的右孩子

    Tree* Create(int* arr,int len)
    {
        if(arr == NULL || len == 0) return NULL;
        Tree* tree = (Tree*)malloc(sizeof(Tree)*len);
        
        for(int i = 0; i < len; i++)
        {    
            tree[i].val = arr[i];
            if((2*i+1) < len)
                tree[i].pleft = &tree[2*i+1];
            else
                (tree[i]).pleft = NULL;
            if((2*i+2) < len)
                tree[i].pright = &tree[2*i+2];
            else
                tree[i].pright = NULL;
        }
        return tree;
    }
  • 相关阅读:
    对我最重要的三个老师
    究竟 javascript 错误处理有哪些类型?
    前端小白凭什么杀进 BAT?
    金九银十,换工作热潮来临!
    适用于Java开发人员的SOLID设计原则简介
    在5分钟内将Spring Boot作为Windows服务启动
    Redis中的Java分布式缓存
    Arrays工具类详解
    SpringBoot整合redis
    java 数组用法详解
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9028301.html
Copyright © 2020-2023  润新知