8606 二叉树的构建及遍历操作

news2024/9/26 14:54:27

### 伪代码
1. **CreateBiTree**:
   - 读取一个字符 `ch`。
   - 如果 `ch` 是 `#`,则当前节点为空。
   - 否则,创建一个新节点 `T`,将 `ch` 赋值给 `T` 的数据域。
   - 递归创建 `T` 的左子树。
   - 递归创建 `T` 的右子树。

2. **PreOrderTraverse**:
   - 如果 `T` 不为空,先访问根节点,再递归访问左子树,最后递归访问右子树。

3. **InOrderTraverse**:
   - 如果 `T` 不为空,先递归访问左子树,再访问根节点,最后递归访问右子树。

4. **PostOrderTraverse**:
   - 如果 `T` 不为空,先递归访问左子树,再递归访问右子树,最后访问根节点。

5. **main**:
   - 创建二叉树 `T`。
   - 调用前序遍历函数。
   - 调用中序遍历函数。
   - 调用后序遍历函数。

### C++代码
 

#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK  1
#define ERROR  0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int  Status;

typedef char  ElemType;
typedef struct BiTNode {
    ElemType data;
    struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;

Status CreateBiTree(BiTree &T) {  // 算法6.4
    // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
    // 构造二叉链表表示的二叉树T。
    char ch;
    scanf(" %c", &ch);
    if (ch == '#') T = NULL;
    else {
        if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
        T->data = ch; // 生成根结点
        CreateBiTree(T->lchild); // 构造左子树
        CreateBiTree(T->rchild); // 构造右子树
    }
    return OK;
} // CreateBiTree

Status PreOrderTraverse(BiTree T) {
    // 前序遍历二叉树T的递归算法
    if (T) {
        printf("%c", T->data); // 访问根节点
        PreOrderTraverse(T->lchild); // 递归遍历左子树
        PreOrderTraverse(T->rchild); // 递归遍历右子树
    }
    return OK;
} // PreOrderTraverse

Status InOrderTraverse(BiTree T) {
    // 中序遍历二叉树T的递归算法
    if (T) {
        InOrderTraverse(T->lchild); // 递归遍历左子树
        printf("%c", T->data); // 访问根节点
        InOrderTraverse(T->rchild); // 递归遍历右子树
    }
    return OK;
} // InOrderTraverse

Status PostOrderTraverse(BiTree T) {
    // 后序遍历二叉树T的递归算法
    if (T) {
        PostOrderTraverse(T->lchild); // 递归遍历左子树
        PostOrderTraverse(T->rchild); // 递归遍历右子树
        printf("%c", T->data); // 访问根节点
    }
    return OK;
} // PostOrderTraverse

int main() { // 主函数
    BiTree T;
    CreateBiTree(T); // 创建二叉树
    PreOrderTraverse(T); // 前序遍历
    printf("\n");
    InOrderTraverse(T); // 中序遍历
    printf("\n");
    PostOrderTraverse(T); // 后序遍历
    printf("\n");
    return 0;
} // main

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

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

相关文章

15 Midjourney从零到商用·实战篇:建筑设计与室内设计

以前设计师生成一张效果图需要先画草稿,导入三维软件搭建场景后,再用渲染器渲染,而现在只需要有客户的意向图或者自己想法,在MidJourney中就能一键生成惊艳的效果图。 “给我一个prompt我能撬动整个设计界”。设计师在AI绘画面前似…

安卓系统常见问题如native crash,卡顿卡死定位工具命令技巧-android framework实战开发

背景: 有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等,比如native crash在企业里面该如何准确定位具体代码函数,程序卡住,或者长时间没反应,想要看看卡在代码的哪里。针对以上的一些问题&#…

中电金信:源启智能视觉分析系统~助力各行业破局升级,释放新质生产力

作为人工智能与计算机视觉的交叉范畴,智能视觉模仿人类视觉机能,来对各种形式的视觉输入予以处理、理解以及决策。当下,智能视觉已然发展为应用广泛、市场覆盖面大且形式多元的产业方向,获得了国家政策的强力支持。数字化时代搭台…

开源模型应用落地-qwen2.5-7b-instruct-LoRA微调-LLaMA-Factory-单机单卡-V100(十八)

一、前言 本篇文章将使用LLaMA-Factory去高效微调(命令和界面方式)QWen2.5系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 QWen2系列模型微调: 开源模型应用落地-qwen2-7b-instruct-LoRA微调-LLaMA-Factory-单机单…

MySQL Mail服务器集成:如何配置发送邮件?

MySQL Mail插件使用指南?怎么优化 MySQL发邮件性能? MySQL Mail服务器的集成,使得数据库可以直接触发邮件发送,极大地简化了应用架构。AokSend将详细介绍如何配置MySQL Mail服务器,以实现邮件发送功能。 MySQL Mail&…

IDEA相关设置总结

目录 1.设置JDK 2.设置忽略大小写检查 3.设置字体大小 4.设置类的信息 5.包名分级 1.设置JDK 2.设置忽略大小写检查 3.设置字体大小 4.设置类的信息 5.包名分级 取消勾选

利用低代码快速搭建电商小程序之商品列表页

目标: 搭建商城的一个商品列表页面(先做静态页) 开发环境: 访问白码低代码平台:https://www.bnocode.com/ 白码的新自定义页功能(使用vue框架) 前期准备: 需要先准备商品数据表…

数据结构:Heap堆应用(堆排序,TOP-K问题)手把手带你入门数据结构~

文章目录 前言一、堆排序1. 数据入堆2. 堆排序3. 时间复杂度(1)冒泡排序时间复杂度(2)向上调整建堆的时间复杂度(3)向下调整建堆的时间复杂度 4. 堆排序总结 二、TOP-K问题1. TOP-K问题背景2. TOP-K问题解决…

【日记】感觉自己已经魔怔了(817 字)

正文 下午装档案的时候,无意间朝外看了一眼,发现自己视力衰退了好多。感觉两只眼睛都有散光了,看东西有重影。有些担心。 兄长血检报告出来了,血红蛋白高,肌酐低。尿酸倒是正常了,但总体还是偏高。我觉得好…

408解题小助手—文心智能体

体验链接:408解题小助手 问题: 个字符有如下 种编码方案,不是前缀编码的是 A. 01 0000 0001 001 1 B. 011, 000, 001, 010, 1 C. 000, 001, 010, 011, 100 D. 0, 100, 110, 1110, 1100 回答: 不是前缀编码的是选项 D:0…

Java项目: 基于SpringBoot+mybatis+maven实现的智能推荐卫生健康系统分前后台(含源码+数据库+开题报告+任务书+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven实现的智能推荐卫生健康系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美…

C++ —— 关于list

目录 链接 前言 1. 迭代器浅解 2. 接口 2.1 构造函数 2.2 push_back 2.3 emplace_back 2.4 insert 2.5 erase 2.6 reverse 2.7 sort 2.8 merge 2.9 unique 2.10 splice 链接 cplusplus.com/reference/list/list/?kwlisthttps://cplusplus.com/reference/list/list…

MSF工具使用教程

Metasploit 简介 Metasploit 是一个漏洞框架,拥有超过 1700 个漏洞利用程序,大大简化了渗透测试的工作,同时具有模块化的体系结构,渗透测试人员可以很方便的添加或修改exploit。 安装及维护 安装 使用 Rapid7 的一套快速安装项…

js逆向--某建筑市场公共监管服务平台

js逆向--某建筑市场公共监管服务平台 一、抓包二、断点调试三、写代码一、抓包 很容易找到数据接口,发现响应加密了。 二、断点调试 打开源代码/来源界面,下一个XHR断点。 点击翻页,发现代码断住了。 发现到下图中的位置时,明文出现了。 点击上图中的图标进入b方法,找…

数据集-目标检测系列-自行车检测数据集 bike>> DataBall

数据集-目标检测系列-自行车检测数据集 >> DataBall 数据集-目标检测系列-自行车检测数据集 数据量:1W 数据项目地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/TechLinkX/Data…

mybatisplus 分页查询 使用ORDER BY 时可能数据重复

原始方法: 第一页数据: 第二页数据: 解决方案: 后面在添加一个唯一键 id

2024年信息学奥赛CSP-J初赛真题详细分析

CSP-J 2024 入门组初赛第一轮初赛试题及答案解析 一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1 32 位 int 类型的存储范围是( ) A -2147483647 ~ 2147483647B -214…

OpenCV图像文件读写(1)检查 OpenCV 是否支持某种图像格式的读取功能函数haveImageReader()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 haveImageReader 函数通常用于检查 OpenCV 是否支持某种图像格式的读取功能。在 OpenCV 中,haveImageReader 函数可以帮助确定是否可…

【探索智谱AI的CogVideoX:视频生成的新前沿】

2024年8月6日,智谱AI宣布其开源视频生成模型CogVideoX,激发了开发者的创造力和对新技术的期待。 一、CogVideoX模型概述 CogVideoX 是一款先进的视频生成工具,可基于最长 226 个 token 的提示生成视频,时长可达 6 秒,…

美化网页,特效

当阅读博客园的文章时,经常看到精美的特效 博客园美化 - 凌云 - 博客园 (cnblogs.com) 简直不要太好看 自己写了一个前后端分离的网站后,想着应用这些特效,毕竟别人看到特效后逼格还是挺高的 于是,我F12把代码拿了下来 【手动狗…