首页 > 其他分享 >144-14

144-14

时间:2023-10-13 20:56:13浏览次数:27  
标签:144 TreeNode 14 int Queue front return rear

求树宽

与非递归求树高相同,只不过是将high++变成了最大值的判断

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

#define MaxSize 100

typedef struct node{
    int data;
    struct node *lchild,*rchild;
}TreeNode,*Tree;

typedef struct{
    TreeNode* data[MaxSize];
    int front;
    int rear;
}Queue;

void InitQueue(Queue &Q)
{
    Q.front=Q.rear=0;
}

bool isEmpty(Queue Q)
{
    if(Q.front==Q.rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool isFull(Queue Q)
{
    if((Q.rear+1)%MaxSize==Q.front)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool EnQueue(Queue &Q,TreeNode* p)
{
    if(isFull(Q))
    {
        return false;
    }
    Q.data[Q.rear]=p;
    Q.rear=(Q.rear+1)%MaxSize;
    return true;
}

bool DeQueue(Queue &Q,TreeNode* &p)
{
    if(isEmpty(Q))
    {
        return false;
    } 
    p=Q.data[Q.front];
    Q.front=(Q.front+1)%MaxSize;
    return true;
}

void CreateTree(Tree &T)
{
    int x;
    scanf("%d",&x);
    if(x==-1)
    {
        T=NULL;
        return;
    }
    else
    {
        T=(TreeNode*)malloc(sizeof(TreeNode));
        T->data=x;
        printf("输入%d的左结点:",x);
        CreateTree(T->lchild);
        printf("输入%d的右结点:",x);
        CreateTree(T->rchild);
    }
}

int Wide(Tree T)
{
    if(T==NULL)
        return 0;
    Queue Q;
    InitQueue(Q);
    TreeNode *p=T;
    int wide=1;
    int current=1;
    int previous=1;
    EnQueue(Q,p);    
    while(!isEmpty(Q))
    {
        DeQueue(Q,p);
        previous--;
        current--;
        if(p->lchild)
        {
            EnQueue(Q,p->lchild);
            current++;
        }
        if(p->rchild)
        {
            EnQueue(Q,p->rchild);
            current++;
        }
        if(previous==0)
        {
            previous=current;
            if(previous>wide)
                wide=previous;
        }
    }
    return wide;
} 

int main()
{
    Tree T;
    CreateTree(T);
    printf("%d ",Wide(T));
    
    return 0;
}

 

标签:144,TreeNode,14,int,Queue,front,return,rear
From: https://www.cnblogs.com/simpleset/p/17763124.html

相关文章

  • 2023-2024-1 20231413 《计算机基础与程序设计》第三周学习总结
    班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第2、3章并完成云班课测试《C语言程序设计》第2章并完成云班课测试教材学习内容总结:了解了进制转换、图像/音频压缩,计算机数学的基础知识教材学习中的......
  • CF1416E Split
    暴力dp是很拉跨的,我们会设\(dp_{i,j}\)表示前\(i\)个\(a_i\)分裂后,最后一个\(b\)为\(j\)时的最小答案,爆炸。但这里面有很多性质啊,直观地我们可以感受到,若已经确定了决策\(dp_{i-1,k}\),那么无论如何选择\(a_i\)的分裂方式,对答案带来的贡献都会在\(0\sim2\)之间,......
  • CF1149D Abandoning Roads
    首先\(a\)边可以随便选。显然,若某条\(b\)边的两端位于同一\(a\)连通块,一定不会被我们考虑。剩下的\(b\)边一定会将两个\(a\)连通块相连。那么此时我们对于\(b\)边的约束是,位于一个环上的\(b\)边不能同时存在图中,即,我们的路径不能从当前连通块出发,经过至少一条\(b......
  • CF1439D INOI Final Contests
    先总结一些充要条件。一个人\(i\)选不到自己的\(a_i\)的充要条件为:若为左侧,则存在左侧的一个\(j\)满足\(a_k\in[j,i]\)且\(b_k=R\)的\(k\)的个数\(>i-j\),右侧同理,满足其一即可。一个方案不合法的充要条件为,若对于一个\(b_i=R\)的\(i\),\(i\)选位置时\([a_i,n]......
  • 14.3 Socket 字符串分块传输
    首先为什么要实行分块传输字符串,一般而言Socket套接字最长发送的字节数为8192字节,如果发送的字节超出了此范围则后续部分会被自动截断,此时将字符串进行分块传输将显得格外重要,分块传输的关键在于封装实现一个字符串切割函数,将特定缓冲区内的字串动态切割成一个个小的子块,当切割结......
  • ABC214H Collecting 题解
    前言这是一道比较神仙的题目,其后半部分的建图是比较困难想到的,前半部分还是较为容易的。题意现在有一张\(N\)个点\(M\)条边的有向图,每个点有一个点权\(a_i\),现在要找出\(K\)条路径,使得这些路径的并集的点权和尽量大。现在求出点权和。\(N,M\le2\times10^5,k\le10\)题......
  • 144-12
    在二叉树中查找值为x的结点,找出该结点所有的祖宗结点,值为x的结点个数不多于1个利用二叉树的后序非递归遍历,在Pop函数后判断是否结点值是否等于x,若等于,栈中全是x的祖宗结点,依次弹出#include<stdio.h>#include<stdlib.h>#defineMaxSize100typedefstructnode{int......
  • 洛谷P3576 [POI2014] MRO-Ant colony 题解
    MRO-Antcolony根据下取整除法的性质\((\left\lfloor\dfrac{\left\lfloor\dfrac{x}{y}\right\rfloor}{z}\right\rfloor=\left\lfloor\dfrac{x}{yz}\right\rfloor)\),我们可以反向考虑,即从特殊边开始,计算出从每个叶子到特殊边的路径上,要除以的那个分母是什么。这个可以直接一遍df......
  • 【牛客周赛】round14赛后总结
    碎碎念赛时没出题(真可恶吖)在上晚自习,补了一下。ACD都套着字符串的外壳,差点直接劝退,后来仔细一读发现和字符串没什么关系...大概字符串的用处是为了劝退我这种有些怂字符串的人叭。A.小红的环形字符串题意:对于给定的环形字符串s,可以删除相邻的两个相同字母,问最多删除多少个字......
  • [ARC149E] Sliding Window Sort
    [ARC149E]SlidingWindowSort考虑到\(k\le10^9\)太大了,我们先模拟一下看看能不能化成\(k\)比较小的情况。注意到,我们每次只会在\(i\)留下一个数,相当于我们手上一定有前缀前\(m-1\)大的数。这样当我们操作完\([n-m,n-1]\)时,手上就会有\([n-m+1,n]\),然......