首页 > 编程语言 >//按照完全二叉树的层次顺序一次输入节点信息建立二叉链表的算法

//按照完全二叉树的层次顺序一次输入节点信息建立二叉链表的算法

时间:2022-10-11 21:11:26浏览次数:51  
标签:bt ch 二叉 链表 二叉树 front NULL BinTree rear

//按照完全二叉树的层次顺序一次输入节点信息建立二叉链表的算法


#include <stdio.h>
#include <stdlib.h>

typedef char DataType;

typedef struct node
{
    DataType data;
    struct node* lchild, * rchild;
} BinTNode;

typedef BinTNode* BinTree;



BinTree CreateBinTree(BinTree bt)
{
    //Q[1....n] 是一个BinTNode类型的指针数组,front和rear分别是对头和队尾指针
    BinTree Q[100];
    BinTree s;
    int front, rear;
    char ch;
    ch = getchar();
    bt = NULL;
    front = 1; rear = 0;
    while (ch != '#')
    {
        s = NULL;
        if (ch != "@")
        {
            s = (BinTNode*)malloc(sizeof(BinTNode));
            s->data = ch;
            s->lchild = s->rchild = NULL;

        }

        rear++; //队尾指针自增
        Q[rear] = s;
        
        printf("队尾-------第(%d)位:", rear);
        printf("%c\n",s->data);
        if (rear == 1) {
            bt = s;
        } else {
            if (s != NULL && Q[front] != NULL)
            {
                if (rear % 2 == 0)
                {
                    Q[front]->lchild = s;
                    printf("双亲节点(%d)位的左分支:%c\n", front, s->data);
                }
                else {
                    Q[front]->rchild = s;
                    printf("双亲节点(%d)位的右分支:%c\n", front, s->data);
                }
                if (rear % 2 != 0)
                {
                    front++; //rear为奇数,说明front所指节点的左右儿子都处理完了,因此front加1指向下一个双亲
                }

            }
        }
        getchar();
        ch = getchar();
    }//end while
    return bt;
}


int main()
{
    BinTree bt=NULL;
    CreateBinTree(bt);
    return 0;
}

  

 

标签:bt,ch,二叉,链表,二叉树,front,NULL,BinTree,rear
From: https://www.cnblogs.com/Mengchangxin/p/16782587.html

相关文章

  • 代码随想录 | 二叉树
    226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]ψ(`∇´)ψ我的思路还是用了层序......
  • 算法每日一题(反转单链表)C语言版
     在本篇文章里,我将分享一道很经典的算法题———反转链表,并且分享多种方法去解决方法,希望可以帮助到你......
  • 二叉树广义表的算法生成 (A(B(,D(E,F)),C))
     #include<stdio.h>#include<stdlib.h>typedefcharDataType;typedefstructnode{DataTypedata;structnode*lchild,*rchild;}BinTNode;ty......
  • 平衡二叉树
    代码publicclassMain{publicstaticvoidmain(String[]args){int[]arr={10,11,6,9,7,8};AVLTreebinarySortTree=newAVLTree();fo......
  • OFF27 二叉树镜像
    publicTreeNodemirrorTree(TreeNoderoot){if(root==null){returnnull;}TreeNodeleft=mirrorTree(root.left);T......
  • OFF28 对称二叉树
    publicbooleanisSymmetric(TreeNoderoot){if(root==null){returntrue;}returnjudge(root.left,root.right);}......
  • 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
    目录​​一、单链表的增删改查​​​​1、创建结点     ​​​​2、单链表的添加操作​​​​3、单链表的删除操作​​​​4、单链表的有效结点的个数​​​​二、......
  • 链表结构
    链表一、链表的分类1.1单项链表每个node节点指向下一个节点。然后有个head节点指向第一个节点,尾节点指向null。也可以有个last节点指向最后一个节点。这样能快速获取......
  • Leecode 111.二叉树的最小深度
    /**Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*......
  • 算法练习-第十五天【二叉树】
    二叉树226.翻转二叉树参考:代码随想录思路翻转二叉树的方式:递归迭代法层序遍历1.递归前序遍历/***Definitionforabinarytreenode.*typeTreeNodes......