首页 > 其他分享 >C语言 层次遍历二叉树

C语言 层次遍历二叉树

时间:2023-12-16 20:45:20浏览次数:34  
标签:遍历 level int BiTree SqQueue C语言 二叉树 bitree void

代码如下

#include<stdio.h>
#include<stdlib.h>
#define Max_Size 50
typedef struct bitree
{
    char data;
    int level;
    struct bitree *lchild;
    struct bitree *rchild;
}BiTreeNode,*BiTree;


typedef struct queue
{
    BiTree Data[Max_Size];
    int front;
    int rear;
}SqQueue;

void init_queue(SqQueue *);
void EnQueue(SqQueue *,BiTree);
void DeQueue(SqQueue *);
int empty_queue(SqQueue *);
BiTree init_bitree();
void travel_bitree(BiTree);
void level_set(BiTree);
void max_wideth(SqQueue);
int main()
{
    BiTree T;
    T=init_bitree();//CEI#J##F#GK##H##D##
    T->level=1;
    level_set(T);
    printf("层次遍历结果如下:\n");
    travel_bitree(T);
    return 0;
}

void init_queue(SqQueue *Q)
{
    Q->front=Q->rear=0;
}

void EnQueue(SqQueue *Q,BiTree e)
{
    if(e)
    {
        Q->Data[Q->rear]=e;
        Q->rear++;
    }
}

void DeQueue(SqQueue *Q)
{
    Q->front++;
}

int empty_queue(SqQueue *Q)
{
    if(Q->front==Q->rear)
        return 1;
    else
        return 0;
}

BiTree init_bitree()
{
    char ch;
    ch=getchar();
    if(ch=='#')
        return NULL;
    else
    {
        BiTree T;
        T=(BiTree )malloc(sizeof(BiTreeNode));
        T->data=ch;
        T->lchild=init_bitree();
        T->rchild=init_bitree();
        return T;
    }
}

void level_set(BiTree T)
{
    if(T->lchild)
    {
        T->lchild->level=T->level+1;
        level_set(T->lchild);    
    }    
    if(T->rchild)
    {
        T->rchild->level=T->level+1;
        level_set(T->rchild);
    }     
}

void travel_bitree(BiTree T)
{
    SqQueue Q;//层次遍历二叉树 
    init_queue(&Q);
    EnQueue(&Q,T);
    while(!empty_queue(&Q))
    {
        EnQueue(&Q,Q.Data[Q.front]->lchild);
        EnQueue(&Q,Q.Data[Q.front]->rchild);
        printf("(结点:%c 层次:%d)\n",Q.Data[Q.front]->data,Q.Data[Q.front]->level);
        DeQueue(&Q);
     } 
    max_wideth(Q);
}

void max_wideth(SqQueue Q)
{
    int num[Max_Size+1];
    int max=0;
    for(int i=1;i<=Max_Size;i++)
        num[i]=0;
    for(int i=0;i<Q.rear;i++)
    {
        num[Q.Data[i]->level]++;
    }
    for(int i=1;i<=Max_Size;i++)
    {
        if(max<num[i])
        {
            max=num[i];
        }
    }
    printf("该二叉树的最大宽度为:%d",max);
}

 

标签:遍历,level,int,BiTree,SqQueue,C语言,二叉树,bitree,void
From: https://www.cnblogs.com/wei-1024/p/17908340.html

相关文章

  • C语言 哲学家进餐问题
     #include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<time.h>#include<unistd.h>#include<pthread.h>#include<semaphore.h>#defineNsem_tchopsticks[N];//设置5种信号量,有5种不同类型的资源,每一种有1个,这样便于理解,......
  • 《初学C语言第29天》
    //////————————8.回调函数////回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个////函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数////的实现方直接调用,而是在特定的事件或条件发生时由另......
  • C++U5-10-二叉树3
    学习目标 二叉树重建的概念 二叉树重建流程 例题和解题思路 2 3 4 5 [【二叉树】求先序排列]  代码【算法分析】后序遍历的最后一个是根节点,由这个根节点可以在中序遍历中确定左子树和右子树的大小和元素,然后递归的去处理左子树和右子树,由于是......
  • 遍历utf-8编码下的所有汉字得出的个数是20901个,最终发现实际里面多数是不认识的,常用汉
    utf-8编码下的汉字个数是多少?从正则表达式可以看出  4E00-9FA5实用php遍历一下所有汉字1<?php2//4E00-9FA53//输出所有汉字4header('Content-Type:text/html;charset=utf8');//非必要5$start=hexdec('4e00');//等于0x4e00;hexdec是16进制转为10进制......
  • C语言数组
    数组----一组相同类型分元素的集合。第一个intarr[10]叫完全初始化;第二个charch[5]叫不完全初始化,剩余的默认为零。输出结果如下:可以看到,下标是从0开始的,就是最左边一列的数字。数组使用下标来访问的。......
  • 【教3妹学编程-算法题】反转二叉树的奇数层
    3妹:“你不是真正的快乐,你的笑只是你穿的保护色”2哥 :3妹还在唱五月天的歌啊,你不知道五月天假唱,现在全网都在骂呢。3妹:知道啊,可是关我什么事,这个歌的确好听啊。2哥 :嗯嗯,不错,还以为你是脑残粉,无论黑白都只管追星呢。3妹:我是只管追歌的,歌好听就行啦。2哥 :追哥?追哪个哥,难......
  • C语言如何处理scanf输入函数不安全的问题?
    要不看到这个警告,只需在整个代码的第一行输入:这样scanf函数就不会报错了。......
  • C语言循环语句
    首先根据题意画出示意图来,例如:然后用while()或for()语句,注意嵌套和各种情况......
  • C语言函数的递归
    C语言是一种非常强大的编程语言,它具有丰富的功能和灵活的语法。其中,函数递归是C语言中一个非常重要的概念,它能够让我们在编写程序时更加高效和简洁。在本文中,我们将深入探讨C语言函数递归的原理和用法。首先,让我们来了解一下函数递归的概念。函数递归是指一个函数在其函数体内调用......
  • 第六章 二叉树part01
    第六章二叉树**part01**  递归遍历 144.二叉树的前序遍历 Code:/***Definitionforabinarytreenode.*structTreeNode{*  intval;*  TreeNode*left;*  TreeNode*right;*  TreeNode():val(0),left(nullptr),right(nullpt......