第十一周--二叉树的层次遍历算法

二叉树的遍历(七种方法) 本章主要通过运用递归与非递归方法分别对二叉树进行遍历 主要分先序遍历、中序遍历、后序遍历以及层次遍历四种情况进行讨论 阅读详情
/*
 *Copyright (c) 2015 烟台大学计算机与控制工程学院
 *All right reserved.
 *标题:数据结构实践——二叉树的层次遍历算法
 *作者:杨珺
 *date:2015年11月9日
 *版本:V1.0.1
 *操作系统:XP
 *运行环境:VC6.0
 *问题描述:实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试.
*/
头文件 btreee.h:
#ifndef BTREEE_H_INCLUDED
#define BTREEE_H_INCLUDED

#define MaxSize 100
typedef char ElemType;
typedef struct node
{
    ElemType data;              //数据元素
    struct node *lchild;        //指向左孩子
    struct node *rchild;        //指向右孩子
} BTNode;
void CreateBTNode(BTNode *&b,char *str);        //由str串创建二叉链
BTNode *FindNode(BTNode *b,ElemType x);     //返回data域为x的节点指针
BTNode *LchildNode(BTNode *p);  //返回*p节点的左孩子节点指针
BTNode *RchildNode(BTNode *p);  //返回*p节点的右孩子节点指针
int BTNodeDepth(BTNode *b); //求二叉树b的深度
void DispBTNode(BTNode *b); //以括号表示法输出二叉树
void DestroyBTNode(BTNode *&b);  //销毁二叉树



#endif // BTREEE_H_INCLUDED


btreee.cpp:

#include <stdio.h>
#include <malloc.h>
#include "btreee.h"

void CreateBTNode(BTNode *&b,char *str)     //由str串创建二叉链
{
    BTNode *St[MaxSize],*p=NULL;
    int top=-1,k,j=0;
    char ch;
    b=NULL;             //建立的二叉树初始时为空
    ch=str[j];
    while (ch!='\0')    //str未扫描完时循环
    {
        switch(ch)
        {
        case '(':
            top++;
            St[top]=p;
            k=1;
            break;      //为左节点
        case ')':
            top--;
            break;
        case ',':
            k=2;
            break;                          //为右节点
        default:
            p=(BTNode *)malloc(sizeof(BTNode));
            p->data=ch;
            p->lchild=p->rchild=NULL;
            if (b==NULL)                    //p指向二叉树的根节点
                b=p;
            else                            //已建立二叉树根节点
            {
                switch(k)
                {
                case 1:
                    St[top]->lchild=p;
                    break;
                case 2:
                    St[top]->rchild=p;
                    break;
                }
            }
        }
        j++;
        ch=str[j];
    }
}
BTNode *FindNode(BTNode *b,ElemType x)  //返回data域为x的节点指针
{
    BTNode *p;
    if (b==NULL)
        return NULL;
    else if (b->data==x)
        return b;
    else
    {
        p=FindNode(b->lchild,x);
        if (p!=NULL)
            return p;
        else
            return FindNode(b->rchild,x);
    }
}
BTNode *LchildNode(BTNode *p)   //返回*p节点的左孩子节点指针
{
    return p->lchild;
}
BTNode *RchildNode(BTNode *p)   //返回*p节点的右孩子节点指针
{
    return p->rchild;
}
int BTNodeDepth(BTNode *b)  //求二叉树b的深度
{
    int lchilddep,rchilddep;
    if (b==NULL)
        return(0);                          //空树的高度为0
    else
    {
        lchilddep=BTNodeDepth(b->lchild);   //求左子树的高度为lchilddep
        rchilddep=BTNodeDepth(b->rchild);   //求右子树的高度为rchilddep
        return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);
    }
}
void DispBTNode(BTNode *b)  //以括号表示法输出二叉树
{
    if (b!=NULL)
    {
        printf("%c",b->data);
        if (b->lchild!=NULL || b->rchild!=NULL)
        {
            printf("(");
            DispBTNode(b->lchild);
            if (b->rchild!=NULL) printf(",");
            DispBTNode(b->rchild);
            printf(")");
        }
    }
}
void DestroyBTNode(BTNode *&b)   //销毁二叉树
{
    if (b!=NULL)
    {
        DestroyBTNode(b->lchild);
        DestroyBTNode(b->rchild);
        free(b);
    }
}


main.cpp:

#include <stdio.h>
#include "btreee.h"

void LevelOrder(BTNode *b)
{
    BTNode *p;
    BTNode *qu[MaxSize];    //定义环形队列,存放节点指针
    int front,rear; //定义队头和队尾指针
    front=rear=-1;      //置队列为空队列
    rear++;
    qu[rear]=b;     //根节点指针进入队列
    while (front!=rear) //队列不为空
    {
        front=(front+1)%MaxSize;
        p=qu[front];        //队头出队列
        printf("%c ",p->data);  //访问节点
        if (p->lchild!=NULL)    //有左孩子时将其进队
        {
            rear=(rear+1)%MaxSize;
            qu[rear]=p->lchild;
        }
        if (p->rchild!=NULL)    //有右孩子时将其进队
        {
            rear=(rear+1)%MaxSize;
            qu[rear]=p->rchild;
        }
    }
}

int main()
{
    BTNode *b;
    CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
    printf("二叉树b: ");
    DispBTNode(b);
    printf("\n");
    printf("层次遍历序列:\n");
    LevelOrder(b);
    DestroyBTNode(b);
    return 0;
}


运行结果:

 

总结:

        把二叉树画出来,更直观。

Paraview:Python Calculator Filter python calculator过滤器 from paraview.simple import * connection = servermanager.Connect('localhost',11111) er = servermanager.sources.EnSightreader(CaseFileName='/.../data.case') er.PointArrays = ['x_velocity','1','y_velocity','1','z_velocity','1','cp','1'] 阅读详情

相关推荐

一文详解数据仓库、数据湖、湖仓一体和数据网格

本文对数据仓库、数据湖、湖仓一体、数据网格四个技术概念进行了辨析,并对它们的优势和局限给出了对比介绍。

oOBubbleX的博客 2594

二叉树遍历之层次遍历算法入门详解

层次遍历的原理很简单,总结为一句话就是“从上到下,从左到右”,就是从树根开始逐层访问二叉树的结点,每一层按照从左到右的次序进行访问。 为了方便实现层次遍历,可以引入队列来缓存二叉树上的所有结点,出队列则访问。 入队列的规则:树根先入,之后立刻出队列并访问,然后树根的左、右子树树根依次入队列,之后依次出队列。没出来一个结点,都将其左、右子树树根依次入队(为空者不入)。.........

sunnyoldboy博客 6595

保姆级教程:手把手调试PX4Ctrl的油门映射与姿态控制(附ROS节点配置)

本文提供PX4Ctrl的深度调参指南,涵盖油门映射、姿态控制及ROS节点配置等关键环节。通过详细解析PX4控制器的核心逻辑、递归最小二乘法(RLS)参数估计及状态机设计,帮助开发者优化无人机飞控性能。附实战案例与安全调试建议,适合PX4开发者进阶学习。

weixin_30363981的博客 382

二叉树层次遍历算法

代码区

weixin_45683301的博客 6699

IPCP(IP Control Protocol,IP控制协议)

IPCP(IP Control Protocol,IP控制协议)

天赐好车的博客 754

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

二叉树的遍历(先序、中序、后序、层次)

参照王道数据结构辅导书以及哔哩哔哩大学的部分视频,对二叉树遍历的重要知识点进行归纳,并总结做题技巧。

kusunoki的博客 4万+

分享一个完整的KANO问卷(包含正反问题和选项设置)

本文介绍了KANO模型问卷的设计与应用,用于评估功能需求优先级。问卷包含基本信息、功能评估(正反问题设计)、界面评估及开放问题,选项定义明确(如"非常喜欢"到"很不喜欢")。数据清洗规则包括剔除矛盾回答和注意力检验。通过量化编码和矩阵分析,将需求分为魅力型、期望型、必备型等类别。示例数据显示健康监测为必备型(72%),电子围栏为期望型(45%),适老化改造为无差异型(38%)。该模型为产品决策提供客观量化依据。

从技术实践立足,从项目管理方法论延伸思考 1794

二叉树层次遍历算法——C/C++

二叉树层序遍历 1、算法思想 用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。 在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作: 访问该元素所指向的节点 若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束...

有人_295的博客 9万+

【并发编程五】c++进程通信——共享内存(shared memmory)

现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程 A中 和 进程 B中 的虚拟地址是⼀样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。这样这个进程写⼊的东⻄,另外⼀个进程⻢上就能看到了,都不需要拷⻉来拷⻉去,传来传去,⼤⼤提⾼了进程间通信的速度。⽤了共享内存通信⽅式,带来新的问题,那就是如果多个进程同时修改同⼀个共享内存,很有可能就冲突了。那共享内存的⽅式,就很好的解决了这⼀问题。

junxuezheng的博客 1万+

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。

智慧空间实验室 2073

第十一周 项目1 二叉树的层次遍历算法

/* * 烟台大学计算机与控制工程学院 *文件名称:mian.cpp *作 者:王旭 *完成日期:2015年11月5日 *版 本 号:v1.0 * *问题描述: 实现二叉树的层次遍历算法,并对用A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I))

王旭的博客 773

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

本文详细介绍了如何从零实现一个 C++ RPC(远程过程调用)框架,包括通信抽象、消息抽象、通信实现、以及消息分发器的实现。通过系统化的代码示例,展示了如何构建一个高效、灵活且可扩展的 RPC 框架。

You build it, you run it 2162

第十一周 项目1 二叉树的层次遍历算法

问题及代码: main.cpp: /* * 烟台大学计算机与控制工程学院 *文件名称:mian.cpp *作 者:刘磊 *完成日期:2015年12月18日 *版 本 号:v1.0 * *问题描述:基数排序 * *输入描述:无 *程序输出:无 */ #include #include "btree.h" int main() {

DDraven的博客 643

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

第十一周项目1(1)二叉树的层次遍历算法

问题及代码: #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED /* *烟台大学计控学院 *作 者:孙启先 *完成日期:2016年11月10日 *问题描述:实现二叉树的层次遍历算法,并对用”A(B(,D(,G)),C(E,F))”创建的二叉树进行测试 */ #endif // BTREE_H_INCL

Sqixian97的博客 432

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第十一周 项目1-1二叉树的层次遍历算法

/* 文件名称:main.cpp 作者       :王超 完成日期:2015年11月9日 问题描述:实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试 */ #include #include "btree.h" int main() {     BTNode *b;

Esther1012的博客 453

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

第十一周 二叉树层次遍历算法的验证

/*  Copyright (c)2016,烟台大学计算机与控制工程学院  All rights reserved.  文件名称:二叉树算法验证.cpp  作    者:郝环宇 完成日期:2016.11.10 版 本 号:v1.0    问题描述:  运行并重复测试教学内容中涉及的算法。改变测试数据进行重复测试的意义在于,             可以从更多角度体会算法,以达到逐

Long_Mao000的博客 437

第十一周实践项目1--二叉树的层次遍历算法

代码: 1.(btreee.h见          运行结果: 感想:

TonyABu的博客 640

第十一周项目--【二叉树的层次遍历算法】

/*         *Copyright  (c) 2015, 烟台大学计算机与控制工程学院         *All rights reserved         *作者:李宗政         *完成日期:2015年11月16日         *版本号:V1.0         *内容描述:建立二叉树算法库,二叉树的层次遍历算法。 */ 头文件 #ifndef

DSxiaofeng的博客 587

*第十一周*数据结构实践项目一【二叉树的层次遍历算法】

问题描述  : 【二叉树的层次遍历算法】   实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。       本项目部分使用了之前建立的二叉树算法库算法库,此处不再赘述,只着重看一下主函数部分。   主函数: /* Copyright (c) 2015,烟台大学计算机与控制工程学院

SilverBullet@SDU 893

第十一周实践项目1 - 二叉树算法验证(1)层次遍历算法的验证

/* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十一周项目1 - 二叉树算法验证.cpp 作 者:滕健 完成日期:2016年11月10日 问题描述: 运行并重复测试教学内容中涉及的算法。改变测试数据进行重复测试的意义在于, 可以从更多角度体会算法,以达到逐渐掌握算法的程度。

滕健的博客 279

第十一周 项目1-1 二叉树的层次遍历算法

/* 文件名称:main.cpp 作者 :孙彩虹 完成日期:2015年11月27日 问题描述:实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 */ 部分代码: #include #include "btree.h" void LevelOrder

balabala0322的博客 346

第十一周 项目一(1)-二叉树的层次遍历算法

*作者:张栋 *完成时间:2015年11月16号 *题目描述:           【二叉树的层次遍历算法】    实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。                    请利用二叉树算法库。 *代码1:算法库中的头文件 #ifndef BTREE_H_INCL

zhangdong12138的博客 667

第十一周项目1 - 二叉树层次遍历算法的验证

[csharp] view plain copy   /*    *Copyright (c) 2016,烟台大学计算机学院    *All rights reserved.    *文件名称:btree.cpp    *作者:衣龙川    *完成日期:2016年11月10日    *版本号:vc++6.0    *    *问题描述:二叉树的链式存储及

yilongchuan的博客 547

第十一周项目一(1)二叉树算法验证-层次遍历算法的验证

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十一周项目1 - 二叉树算法验证.cpp 作    者:李丛丛 完成日期:2015年11月16日 版 本 号:v1.0 问题描述:  运行并重复测试教学内容中涉及的算法。改变测试数据进行重复测试的意义在于,      可以从更多角度体会算法,以达到逐渐掌握算

licongcongv1的博客 377

第十一周项目1-(1)二叉树的层次遍历算法

问题及代码: Main.cpp(头文件及函数见之前的二叉树算法库) #include #include "btree.h" void LevelOrder(BTNode *b) { BTNode *p; BTNode *qu[MaxSize]; //定义环形队列,存放节点指针 int front,rear; //定义队头和队尾指针 front=rear

ku258的博客 444
上一篇: 第十周--利用二叉树遍历思想解决问题
下一篇: 第十一周--二叉树的构造(1)
杨珺
博客等级 码龄11年 31粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值