val); PreOrderTraversal(tmp->pleft); Pr..."> val); PreOrderTraversal(tmp->pleft); Pr..."> val); PreOrderTravers">

二叉树遍历

深度遍历:

递归版:递归方法一定要记得加结束条件。三种遍历只是输出语句位置不同。

前序:

void PreOrderTraversal(Tree* tmp)
{
    if(tmp == NULL) return;
    printf("%d\n",tmp->val);
    PreOrderTraversal(tmp->pleft);
    PreOrderTraversal(tmp->pright);
}

中序:

void InOrderTraversal(Tree* tmp)
{
        
    if(tmp == NULL) return;
    InOrderTraversal(tmp->pleft);
    printf("%d\n",tmp->val);
    InOrderTraversal(tmp->pright);
}

后序:

void LastOrderTraversal(Tree* tmp)
{
    if(tmp == NULL) return;
    LastOrderTraversal(tmp->pleft);
    LastOrderTraversal(tmp->pright);
    printf("%d\n",tmp->val);    
}

非递归版:辅助栈完成,后序遍历和前序,中序有所差别,因为后序树最后输出根,找到右孩子,还要保留根,不弹出。

前序:

void UnRecPreTraversal(Tree* tree)
{
    if(tree == NULL) return;
    //申请辅助栈
    Stack* mystack = s_Init();
    while(1)
    {
        while(tree)
        {   
            //打印
            printf("%d ",tree->val);
            //入栈
            s_Push(mystack,tree);
            //向左走
            tree = tree->pleft;
        }
        //弹出
        tree= s_Pop(mystack);
        //栈空结束
        if(tree == NULL ) break;
        tree = tree->pright;
    }    
    s_Destroy(&mystack);
}

中序:与前序遍历只改变了输出语句的位置

void UnRecInTraversal(Tree* tree)
{
    if(tree == NULL) return;
    Stack* mystack = s_Init(); 
    while(1)
    {
        while(tree)
        {
            s_Push(mystack,tree);
            tree = tree->pleft;
        }
        tree= s_Pop(mystack);
        if(tree == NULL) break;
        printf("%d ",tree->val);
        tree = tree->pright;
    }    
    s_Destroy(&mystack);
}

后序:先输出根的右孩子,再输出根,所以不能先将根弹出,当右孩子处理完毕或者右孩子为空时,再弹出打印。作为父亲节点,打印的前一个节点一定是它的右孩子

void UnRecLastTraversal(Tree* tree)
{
    if(tree == NULL) return;
    //辅助栈
    Stack* mystack = s_Init(); 
    Tree* bj = NULL;
    while(1)
    {
        while(tree)
        {
            //入栈向左走
            s_Push(mystack,tree);
            tree = tree->pleft;
        }
        if(mystack->pHead == NULL) break;
        //当栈顶元素没有右孩子,或者右孩子被标记(处理过),弹出此根节点
        if(mystack->pHead->val->pright == NULL || mystack->pHead->val->pright == bj)
        {    
            //弹出 打印 标记
            bj = s_Pop(mystack);
            printf("%d ",bj->val);
        }
        else //处理右孩子
        {
            tree = mystack->pHead->val->pright;    
        }
    }    
    s_Destroy(&mystack);
}

层序遍历:辅助队列,将节点先压入队列,每次取出先输出,然后查看是否有左右节点再压入队列

void LevelTraversal(BinaryTree *pTree)
{
    if(pTree == NULL)return;

    //申请辅助队列
    Queue *pQueue = Init();//根入队
    q_Push(pQueue,pTree);

    while(!q_IsEmpty(pQueue))
    {
        //弹出
        pTree = q_Pop(pQueue);

        //打印
        printf("%d ",pTree->nValue);

        //非空左右入队
        if(pTree->pLeft)  q_Push(pQueue,pTree->pLeft);
        if(pTree->pRight)  q_Push(pQueue,pTree->pRight);
    }
}

 

转载于:https://www.cnblogs.com/Lune-Qiu/p/9026556.html

一、基础信息数据集名称:室内物品目标检测数据集图片数量:- 训练集:3829张图片- 验证集:1095张图片- 测试集:531张图片- 总计:5455张图片分类类别:- 床:常见家具,用于睡眠和休息。- 沙发:客厅座椅,提供舒适坐姿。- 餐桌:用餐区域桌子,支持就餐活动。- 灭火器:安全设备,用于火灾应急处理。- 人:室内环境中的人员,涉及活动检测。- 盆栽植物:装饰性植物,美化室内空间。- 冰箱:厨房电器,用于食物存储和保鲜。- 垃圾桶:废弃物容器,管理垃圾处理。- 电视:娱乐设备,提供视听服务。标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。数据格式:图片文件,搭配YOLO格式标注文本文件。二、适用场景智能家居系统开发:用于识别室内物体,实现自动化控制,如智能灯光调节或安防报警。室内监控安防:检测人员活动和特定物体(如灭火器),提升环境安全评估能力。服务机器人导航:帮助机器人在室内环境中识别物体和障碍物,实现自主移动和交互。计算机视觉研究:支持目标检测算法的训练验证,推动AI模型在室内场景的优化。三、数据集优势类别多样性:覆盖9种常见室内物体,包括家具、电器、安全设备等,提升模型在复杂环境中的泛化能力。精准标注:采用YOLO格式,边界框定位准确,便于直接加载到主流深度学习框架进行训练。数据规模适中:总计超过5000张图片,提供充足的样本用于模型开发和评估。实际应用性强:数据来源于室内环境,直接适用于智能家居、安防监控等现实世界AI解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值