【考研数据结构代码题6】构建二叉树及四大遍历(先中后层)

题目:请你编写完整的程序构建一棵二叉树并对其进行先序遍历、中序遍历、后序遍历与层次遍历,分别打印并输出遍历结果

难度:★★★

二叉树的存储结构

    typedef struct Node{char data;//数据域struct Node* left;//左子树struct Node* right;//右子树}BiNode,*BiTree;//二叉链表

二叉树的构建

        按照先序遍历的的顺序逐个输入结点的值来构建二叉树,其中,以字符‘#’表示该结点为叶子结点,即没有左右孩子,递归地构建左子树与右子树。

void  CreateBiTree(BiTree &T)
{//按先序序列输入二叉树中的结点值 char key; printf("请先序输入字符:");scanf("%c",&key);//输入#代表该结点为叶子结点,结束插入if(key == '#')  T = NULL;else{//分配空间创建新结点 T = (BiNode*) malloc (sizeof(BiNode));T->data = key;CreateBiTree(T->left) ; //构造左子树CreateBiTree(T->right) ;//构造右子树 }
}

 二叉树先序遍历

//先序遍历(根左右)
void PreOrder(BiTree T){if(T){visit(T);PreOrder(T->left);PreOrder(T->right);}
} 

 二叉树中序遍历

//中序遍历(左根右)
void InOrder(BiTree T){if(T){InOrder(T->left);visit(T);InOrder(T->right);}
} 

 二叉树后序遍历

//后序遍历(左右根)
void PostOrder(BiTree T){if(T){PostOrder(T->left);PostOrder(T->right);visit(T);}
} 

  二叉树层次遍历

//层次遍历(自上而下,从左到右)
void LevelOrder(BiTree T){InitQueue(Q);//初始化一个队列BiTree p;//p为当前遍历的结点EnQueue(Q,p);//根节点入队while(!IsEmpty(Q)){DeQueue(Q,p);visit(p);if(p->left!=NULL){//左孩子入队EnQueue(Q,p->left); }if(p->right!=NULL){//右孩子入队EnQueue(Q,p->right); }} 
} 

完整代码

#include<iostream>
#include<stdlib.h>
#include<queue>
using namespace std;
typedef struct Node{char data;struct Node* left;struct Node* right;
}BiNode,*BiTree;//构建二叉树 
void  CreateBiTree(BiTree &T)
{//按先序序列输入二叉树中的结点值 char key; printf("请先序输入字符:");scanf("%c",&key);//输入#代表该结点为叶子结点,结束插入if(key == '#')  T = NULL;else{//分配空间创建新结点 T = (BiNode*) malloc (sizeof(BiNode));T->data = key;CreateBiTree(T->left) ; //构造左子树CreateBiTree(T->right) ;//构造右子树 }
}//访问并输出根结点
void visit(BiTree T){cout<<T->data<<" ";
} //先序遍历:DLR 
void PreOrder(BiTree T){if(T){visit(T);PreOrder(T->left);PreOrder(T->right);}
} //中序遍历:LDR
void InOrder(BiTree T){if(T){InOrder(T->left);visit(T);InOrder(T->right);}
} //后序遍历:LRD
void PostOrder(BiTree T){if(T){PostOrder(T->left);PostOrder(T->right);visit(T);}
} //层序遍历
void LevelOrder(BiTree T){if(T==NULL) return ;queue<BiTree>que;que.push(T);while(!que.empty()){BiTree ptr=que.front();cout<<ptr->data<<" ";que.pop();if(ptr->left!=NULL)que.push(ptr->left);if(ptr->right!=NULL)que.push(ptr->right);}
} int main(){BiTree T;CreateBiTree(T);cout<<"二叉树构建完成!"<<endl;cout<<"先序遍历:";PreOrder(T);cout<<endl;cout<<"中序遍历:";InOrder(T);cout<<endl;cout<<"后序遍历:";PostOrder(T);cout<<endl;cout<<"层序遍历:";LevelOrder(T);cout<<endl;return 0;
} 

机算结果

手算结果

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择墨西哥专线双清包税前需要了解什么?

选择墨西哥专线双清包税前&#xff0c;需要了解以下几个方面的情况&#xff1a; 1. 墨西哥市场的需求和特点&#xff1a;首先需要了解墨西哥的市场需求和特点&#xff0c;包括消费者对于产品的偏好、消费习惯、购买力等。对于汽配零件行业来说&#xff0c;需要了解墨西哥汽车市…

Docker Rootfs

一、rootfs 介绍 rootfs 是一个操作系统所包含的文件、配置和目录&#xff0c;并不包括操作系统内核。在 Linux 操作系统中&#xff0c;这两部分是分开存放的&#xff0c;操作系统只有在开机启动时才会加载指定版本的内核镜像。 实际上&#xff0c;同一台机器上的所有容器&am…

C++入门,详解类和对象(1)

类和对象 一&#xff0c;前言二&#xff0c;类的介绍2.1类的引入2.2类的定义 三&#xff0c;类访问限定符及其分装3.1访问限定符说明 四&#xff0c;类的作用域五&#xff0c;类的实例化六&#xff0c;类对象模型6.1类的存储方式6.2类的大小计算 七&#xff0c;this指针7.1this…

翻牌器特效--vue3 封装组件

1.效果图 2.下面为封装好的代码&#xff0c;在页面中引入即可 html <template><div id"flip-container" v-if"flag false"><div id"digit-1"class"digit">0</div><div id"digit-2"class"…

NVIDIA安装

电脑显卡类型 两种方法&#xff1a; 选择对应的版本 产品系列下载Notebooks&#xff0c;这样产品才会出现Laptop的GPU&#xff08;Laptop是代表笔记本&#xff09;。 下载完之后双击安装&#xff0c;更改下载路径后&#xff0c;选择默认的下载即可。 卸载 如果之后要卸载…

PM2学习

目录 PM2简介 pm2的主要特性 PM2安装 启动PM2项目 查看应用列表&#xff08;查看当前机器执行的所有进程&#xff09; 查看某个应用详情 重启 停止 删除 日志查看 负载均衡 监控CPU/内存 内存使用超过上限自动重启 监听代码变化/自动重启 PM2简介 PM2是常用的node…

【React】Antd 组件基本使用

Antd 组件基本使用 第一步 安装并引入 antd 包 使用命令下载这个组件库 yarn add antd在我们需要使用的文件下引入&#xff0c;我这里是在 App.jsx 内引入 import { Button } from antd现在我们可以在 App 中使用 Button 组件 <div>App..<Button type"prima…

点成分享丨如何提高旋转蒸发仪的蒸馏提纯效率

旋转蒸发仪&#xff1a; 主要用于医药、化工和制药等行业的浓缩、结晶、干燥、分离及溶媒回收。其原理为在真空条件下&#xff0c;恒温加热&#xff0c;使旋转瓶恒速旋转&#xff0c;物料在瓶壁形成大面积薄膜&#xff0c;高效蒸发。溶媒蒸气经高效玻璃冷凝器冷却&#xff0c;…

module pandas has no attribute Int64Index

pandas报错 pandas 报错解决 pandas 报错 module pandas has no attribute Int64Index 解决 将pandas将为1.1.3版本即可pip uninstall pandas pip install pandas1.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/

汽配零件发FBA美国专线

随着电商的迅速发展&#xff0c;跨境电商平台如亚马逊的FBA(Fulfillment by Amazon)服务成为了许多商家选择的销售渠道。对于汽配零件行业来说&#xff0c;发FBA美国专线可以打开更广阔的市场&#xff0c;并且有望获得可观的发展前景。下面将从市场分析和前景两个方面来探讨汽配…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…

Unity优化(1)——合并Mesh

在某些移动端项目中&#xff0c;对于DrawCall的要求是很严格的&#xff0c;我们一般查看DrawCall可以通过Statistics里面的Batches进行查看&#xff0c;一般移动设备的Batches要控制在200左右比较合适&#xff0c;所以降低Batches是很重要的。 我们常常会遇到一个物体下挂载很多…