• 层序创建二叉树


    创建过程:

    (1) 输入第一个数据:

     若为0,表示此树为空,将空指针赋给根指针,树构造完毕;

     若不为0,动态分配一个节点单元,并存入数据,同时将该节点地址放入队列。

    (2) 若节点不为空,从队列中取出一个节点地址,并建立该节点的左右孩子:

     从输入序列中读入下一数据;

     若读入的数据为0,将出队节点的左孩子指针置空;否则,分配一个新的节点单元,存入所读值,并将其置为出队节点的左孩子,同时将此孩子地址入队;

     接着再从输入序列中读入下一个数据;

     若读入的数据为0,将出队节点的右孩子指针置空;否则,分配一个新的节点单元,存入所读值,并将其置为出队节点的右孩子,同时将此孩子地址入队;

    (3) 重复第(2)步过程,直到队列为空,再无节点出队,构造过程到此结束。

    typedef int ElementType;
    #define NoInfo 0   //用0表示没有节点
    
    //层序创建二叉树
    BinTree CreateBinTree()
    {
        ElementType Data;
        BinTree BT, T;
        queue<TNode *> Q;
        
        //创建第1个节点,即根节点
        cin >> Data;
        if(Data != NoInfo)
        {
            //分配节点单元,并将节点地址入队
            BT = (BinTree)malloc(sizeof(struct TNode));
            BT->Data = Data;
            BT->Left = BT->Right = NULL;
            Q.push(BT);
        }
        else
            return NULL;  //若第一个数据就是0,返回空树
        
        while(!Q.empty())
        {
            T = Q.front(); //从队列中取出一节点地址
            Q.pop();
            cin >> Data;   //读入T的左孩子
            if(Data == NoInfo)
                T->Left = NULL;
            else
            {
                //分配新节点,作为出队节点的左孩子,并将该新节点入队
                T->Left = (BinTree)malloc(sizeof(struct TNode));
                T->Left->Data = Data;
                T->Left->Left = T->Left->Right = NULL;
                Q.push(T->Left);
            }
            
            cin >> Data;  //读入T的右孩子
            if(Data == NoInfo)
                T->Right = NULL;
            else
            {
                //分配新节点,作为出队节点的右孩子,并将该新节点入队
                T->Right = (BinTree)malloc(sizeof(struct TNode));
                T->Right->Data = Data;
                T->Right->Left = T->Right->Right = NULL;
                Q.push(T->Right);
            }
        } //结束while
        
        return BT;    //返回二叉树的根节点
    }
  • 相关阅读:
    如何把本地项目上传到Github
    Git使用详细教程
    PhpStorm中报 “Cannot run program git.exe, 系统找不到指定的文件” 
    delete
    CentOS7 vs centos6
    CentOS 七 vs CentOS 6的不同
    内网端口转发方法汇总
    推荐给开发人员的6个实用命令行工具
    从大公司离职去小公司当 CTO 是一种怎样的体验?
    如果要做点对点的视频传输应该一般使用什么协议
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9729818.html
Copyright © 2020-2023  润新知