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

news/2024/9/25 17:40:38/

### 伪代码
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;
} // CreateBiTreeStatus PreOrderTraverse(BiTree T) {// 前序遍历二叉树T的递归算法if (T) {printf("%c", T->data); // 访问根节点PreOrderTraverse(T->lchild); // 递归遍历左子树PreOrderTraverse(T->rchild); // 递归遍历右子树}return OK;
} // PreOrderTraverseStatus InOrderTraverse(BiTree T) {// 中序遍历二叉树T的递归算法if (T) {InOrderTraverse(T->lchild); // 递归遍历左子树printf("%c", T->data); // 访问根节点InOrderTraverse(T->rchild); // 递归遍历右子树}return OK;
} // InOrderTraverseStatus PostOrderTraverse(BiTree T) {// 后序遍历二叉树T的递归算法if (T) {PostOrderTraverse(T->lchild); // 递归遍历左子树PostOrderTraverse(T->rchild); // 递归遍历右子树printf("%c", T->data); // 访问根节点}return OK;
} // PostOrderTraverseint main() { // 主函数BiTree T;CreateBiTree(T); // 创建二叉树PreOrderTraverse(T); // 前序遍历printf("\n");InOrderTraverse(T); // 中序遍历printf("\n");PostOrderTraverse(T); // 后序遍历printf("\n");return 0;
} // main


http://www.ppmy.cn/news/1530389.html

相关文章

pg入门11-pg中的publications是什么

在 PostgreSQL(PG)中,Publication(发布)是逻辑复制机制中的一个概念,用于定义哪些表的数据变更(INSERT、UPDATE、DELETE)可以发布到订阅者(Subscribers)。它主…

C++ QT程序打包,包含python环境

C QT程序打包,包含python环境 1、导出QT可执行包 首先在QTcreator中选择对应的项目,完成release版本的发布(确保调试成功) 找到生成release的文件夹所在处,将exe执行所需的附加文件一起复制到一个单独文件夹中&#…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…

leetcode24. 两两交换链表中的节点,递归

leetcode24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;he…

【LeetCode】每日一题 2024_9_25 公司命名(字符串、乘法原理)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;公司命名 代码与解题思路 func distinctNames(ideas []string) (ans int64) {// ideas ["coffee","donuts","time","toffee"]// 根据首字母分…

开源 AI 智能名片与 S2B2C 商城小程序:嫁接权威实现信任与增长

摘要&#xff1a;本文探讨了嫁接权威在产品营销中的重要性&#xff0c;并结合开源 AI 智能名片与 S2B2C 商城小程序&#xff0c;阐述了如何通过与权威关联来建立客户信任&#xff0c;提升产品竞争力。强调了在当今商业环境中&#xff0c;巧妙运用嫁接权威的方法&#xff0c;能够…