树树树树树

news2025/1/18 11:55:18

//先序遍历
void PreOrder(BiTree T){
    if(T!=NULL){
        printf("%c",T->data);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}
//后序遍历
void PostOrder(BiTree T){
    if(T!=NULL){
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        printf("%c",T->data);
    }
}
//中序遍历
void InOrder(BiTree T){
    if(T!=NULL){
        InOrder(T->lchild);
        printf("%c",T->data);
        InOrder(T->rchild);
    }
}
//层序遍历(广度优先遍历)
void LevelOrder(BiTree T){
    LinkQueue Q;//申请一个辅助队列
    InitLinkQueue(Q);//初始化队列
    BiTree t;//用于存储出队的元素
    EnLinkQueue(Q,T);//树中元素入队
    while (!IsEmpty(Q)){
        DeLinkQueue(Q,t);
        putchar(t->data);
        if(t->lchild!=NULL){
            EnLinkQueue(Q,t->lchild);
        }
        if(t->rchild!=NULL){
            EnLinkQueue(Q,t->rchild);
        }
    }
}
int main() {
//层序建树
   BiTree pnew;//申请树的结点
   BiTree tree=NULL;//树根此时是空树
   BiElemType c;//abcdefghij
   ptag_t phead=NULL,ptail=NULL,list_pnew=NULL,pcur;
   //phead为队列头,ptail为队列尾,pcur指向当前结点
    while (scanf("%c",&c)){
        if(c=='\n'){
            break;//读到换行就结束
        }
        //为新结点申请空间
        //calloc申请空间并进行初始化,其空间大小为两个参数的乘积
        pnew=(BiTree) calloc(1,sizeof (BiTNode));
        pnew->data=c;//放数据
        list_pnew=(ptag_t) calloc(1,sizeof (tag_t));
        list_pnew->p=pnew;
        //如果是树的第一个结点
        if(tree==NULL){
            tree=pnew;//根节点
            phead=list_pnew;//均指向第一个结点
            ptail=list_pnew;
            pcur=list_pnew;//pcur指向要进树的父节点
        } else{
            //先让元素入队
            ptail->pnext=list_pnew;
            ptail=list_pnew;
            //接下来把结点放入树中
            if(NULL==pcur->p->lchild){
                pcur->p->lchild=pnew;//左孩子为空,插入左孩子
            } else if(NULL==pcur->p->rchild){
                pcur->p->rchild=pnew;//右孩子为空,插入右孩子
                pcur=pcur->pnext;//当前结点左右孩子已经满了,就指向队列中的下一个结点
            }
        }
    }
    PreOrder(tree);
    printf("----------PreOrder\n");
    PostOrder(tree);
    printf("----------PostOrder\n");
    InOrder(tree);
    printf("----------InOrder\n");
    LevelOrder(tree);
    printf("----------LevelOrder\n");
    return 0;
}

代码运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/997738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美国星链再迎挑战,中国最有钱的通信企业争夺卫星互联网服务

随着一家手机企业发布5G卫星手机,卫星互联网服务的热度大增,业界人士指出目前能提供卫星互联网服务的仅有中国电信,但是中国移动已不甘落后,正在测试低轨道卫星互联网服务,这也是中国与美国星链竞争的序幕。 据了解日前…

表的约束类型

空属性约束 mysql有空属性和非空属性:null和not null 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算 所以我们在设计数据库表的时候,一定要在表中进行限制&…

嵌入式:驱动开发 Day2

作业&#xff1a;字符设备驱动&#xff0c;完成三盏LED灯的控制 驱动代码&#xff1a; mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include &q…

oracle表空间释放

oracle表空间释放 1&#xff09;查询表空间信息2&#xff09;查询指定表空间下各个表的表空间使用情况3-1&#xff09;可以直接释放3-2) 可以move3-3&#xff09;重新排列 1&#xff09;查询表空间信息 selecta.tablespace_name as "表空间名",total as "表空间…

初识Java 7-1 多态

目录 向上转型 难点 方法调用绑定 产生正确的行为 可扩展性 陷阱&#xff1a;“重写”private方法 陷阱&#xff1a;字段与静态方法 构造器和多态 构造器的调用顺序 继承和清理 构造器内部的多态方法行为 协变返回类型 使用继承的设计 替换和扩展 向下转型和反射…

Java开发之Mysql【面试篇 完结版】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、知识体系二、Mysql-优化1. 优化-如何定位慢查询① 问题引入② 解决方案③ 问题总结④ 实战面试 2. 优化-sql执行很慢&#xff0c;如何解决① 问题引入② 解…

AI项目五:结印动作识别

若该文为原创文章&#xff0c;转载请注明原文出处。 感谢恩培大佬对项目进行了完整的实现&#xff0c;并将代码进行开源&#xff0c;供大家交流学习。 恩培大佬开源地址&#xff0c;有兴趣的可以去复现一下。GitHub - enpeizhao/CVprojects: computer vision projects | 计算机…

计算机网路学习-time_wait过多

四次挥手 调试命令 netstat -an|awk ‘/tcp/ {print $6}’|sort|uniq -c netstat -an 列出系统中所有处于活动状态的网络连接信息&#xff0c;包括 IP 地址、端口号、协议等。 其中&#xff0c;第六列是tcp的状态。 Proto Recv-Q Send-Q Local Address Foreign Addr…

Aidlux工业视觉缺陷检测

Aidlux工业视觉缺陷检测 1. AidLux简介 AidLux是成都阿加犀智能科技有限公司自主研发的融合架构平台&#xff0c;提供Android&#xff0f;鸿蒙&#xff0b;Linux融合系统&#xff0c; 双系统既能独立使用又能相互通信。 阿加犀致力于人工智能核心技术持续创新&#xff0c; 独…

CSS元素浮动

概述 浮动简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff0c;默认宽与高都是被内容撑开的&#xff08;尽可能小&#xff09;&am…

AKF拆分原则

在分布式软件环境下&#xff0c;为了保障分布式架构的可靠性、可扩展、高性能&#xff0c;通常会通过集群、扩容、数据分治等思想来实现&#xff0c;比如很多中间件的使用Redis、ZK、Kafka等&#xff0c;都可以通过这种设计思想来提高系统架构吞吐量。AKF是一个系统化的拓展思想…

Vue框架+Element组件库学习笔记

一、Vue框架 vue&#xff1a;是一款前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff08;如document.getElementById("文本输入框名").value&#xff09;&#xff0c;简化书写。基于MVVM&#xff08;Model-View-ViewModel&#xff09;思想&#xff0c;实…

YApi 新版如何查看 http 请求数据

YApi 新版如何查看 http 请求数据 因chrome 安全策略限制&#xff0c;在 cross-request 升级到 3.0 后&#xff0c; 不再支持文件上传功能&#xff0c;并且需要通过以下方法查看 network:1.首先在chrome 输入 > chrome://extensions打开扩展页2.开启开发者模式3.点击 cross…

震惊:QGroupBox在linux下居然不显示边框

1、linux系统下GroupBox默认无边框&#xff0c;如需添加&#xff0c;需要通过style来修改 下面介绍几个例子&#xff1a; QGroupBox {background: transparent;border: 1px solid rgb(130, 130, 130);border-radius: 6px;}QGroupBox::title {subcontrol-origin: margin;subcont…

RegShot – 注册表比较工具

RegShot 是一种注册表比较工具&#xff0c;它通过两次抓取注册表而快速地比较出答案。它还可以将您的注册表以纯文本方式记录下来&#xff0c;便于浏览&#xff1b;还可以监察 Win.ini&#xff0c;System.ini 中的键值&#xff1b;还可以监察您Windows目录和 System 目录中文件…

比较聚合模型实战文本匹配

引言 本文我们采用比较聚合模型来实现文本匹配任务。 数据准备 数据准备包括 构建词表(Vocabulary)构建数据集(Dataset) 本次用的是LCQMC通用领域问题匹配数据集&#xff0c;它已经分好了训练、验证和测试集。 我们通过pandas来加载一下。 import pandas as pdtrain_df …

diskqueue第五篇 - 追尾检测,错误处理,如何正常关闭

diskqueue是nsq消息持久化的核心&#xff0c;内容较多&#xff0c;故分为多篇 1. diskqueue第一篇 - 是什么&#xff0c;为什么需要它&#xff0c;整体架构图&#xff0c;对外接口 2. diskqueue第二篇 - 元数据文件&#xff0c;数据文件&#xff0c;启动入口&#xff0c;元数…

熟悉Redis6

NoSQL数据库简介 技术发展 技术的分类 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解决扩展性的问题&#xff1a;Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题&#xff1a;NoSQL、Java线程、Hadoop、Nginx…

嵌入式-Linux基本操作 pwd cd ls touch clear mkdir rm cp mv

目录 一.Linux文件系统 二.Linux目录结构 三.Linux基本命令 3.1shell脚本 3.2pwd命令 3.3cd命令 3.4ls命令 3.5touch命令 3.6clear命令 3.7mkdir命令 3.8rm命令 3.9cp命令 3.10mv命令 一.Linux文件系统 Linux文件系统是Linux操作系统中用于组织和管理文件和目录的…

【算法训练-链表 六】【查找】:链表中倒数第k个节点

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【查找链表】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…