二叉树的建立与遍历(先中后层序)
在做一些算法题时,我会经常用到VS2017去测试,每次去找一个合适的二叉树觉得很麻烦,今天就自己写了一个放在博客上,下次就直接复制了
包含二叉树的建立,以及二叉树的前序遍历、中序遍历、后序遍历和层序遍历
main.c
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;class Node {public:float data; // 节点数据Node * leftChiled = nullptr; // 左孩子Node * rightChiled = nullptr; // 右孩子Node(float data) :data(data) {}; 构造函数
};//先序遍历
void preOrder(Node & node) {cout << node.data << " ";if (node.leftChiled != nullptr) {preOrder(*(node.leftChiled));}if (node.rightChiled != nullptr) {preOrder(*(node.rightChiled));}
}void midOrder(Node & node) {if (node.leftChiled != nullptr) {midOrder(*(node.leftChiled));}cout << node.data << " ";if (node.rightChiled != nullptr) {midOrder(*(node.rightChiled));}
}void postOrder(Node & node) {if (node.leftChiled != nullptr) {postOrder(*(node.leftChiled));}if (node.rightChiled != nullptr) {postOrder(*(node.rightChiled));}cout << node.data << " ";
}//层序遍历
vector<vector<int>> levelOrder(Node* root) {if (root == nullptr) return {};vector<vector<int>> ans;//利用q.size() 来保证当前层的元素的数目queue<Node*> q;q.push(root);while (!q.empty()) {int qSize = q.size();ans.emplace_back(vector<int>());//先将ans插入一个空数组for (int i = 0; i < qSize; i++) {Node* temp = q.front();q.pop();ans.back().emplace_back(temp->data);//ans.back()就是刚才哪个空数组if (temp->leftChiled) q.push(temp->leftChiled);if (temp->rightChiled) q.push(temp->rightChiled);}}return ans;
}int main() {//所生成的二叉树/** 6(root)* 5(one) 7(two)* 0(three) 2(four) 9(five)*///创建二叉树的根及若干节点Node root(6);Node one(5);Node two(7);Node three(0);Node four(2);Node five(9);//拼接节点root.leftChiled = &one;root.rightChiled = &two;one.leftChiled = &three;one.rightChiled = &four;two.rightChiled = &five;//先序遍历cout << "先序遍历结果:" << endl;preOrder(root);cout << endl;cout << endl;//中序遍历cout << "中序遍历结果:" << endl;midOrder(root);cout << endl;cout << endl;//后序遍历cout << "后序遍历结果:" << endl;postOrder(root);cout << endl;cout << endl;//层序遍历cout << "层序遍历结果:" << endl;vector<vector<int>> ans=levelOrder(&root);for(int i=0;i<ans.size();i++){for (auto data : ans[i])cout << data<<" ";cout << endl;}}
结果显示
二叉树的建立与遍历(先中后层序)相关推荐
- 二叉树的相关性质及其前中后层序遍历实现
写在前面: 本文前面部分介绍相关概念,后面部分是程序. 点击下面链接查看更多! 点击此处发现更多 一.二叉树的概念 1.1 相关术语 ①结点:包含一个数据元素及若干指向子树分支的信息 . ②结点的度: ...
- 二叉树:通过前序遍历与中序遍历序列输出二叉树的后序遍历序列
题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历: ...
- 根据二叉树的先序遍历和中序遍历建立二叉树
根据二叉树的先序遍历和中序遍历建立二叉树 rebacktree 根据二叉树的先序遍历和中序遍历建立二叉树. rebacktree1 根据二叉树的后序序遍历和中序遍历建立二叉树. #include &q ...
- 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历
数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...
- 小朋友学数据结构(3):二叉树的建立和遍历
小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...
- 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
程序用VC编写,实现建立一棵二叉树的功能,并对其进行遍历(先序.中序.后序),并且打印输出遍历结果. 二叉树的建立与遍历实验报告 级 班 年 月 日 姓名 学号_ 1.实验题目 建立一棵二叉树,并对其 ...
- 数据结构——二叉树的建立与遍历算法(实验报告)
实验名称:二叉树的建立与遍历算法 指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1.掌握二叉树的定义. 2.二叉树的链式存储结构及在链式存储结构中三种遍历(前 ...
- 二叉树 的建立及遍历 过程
我知道二叉树有先序遍历,中序遍历,后续遍历等等,不过这里说的的是输入一些点(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ...
最新文章
- 导致用户体验差造成网站跳出率过高的原因有哪些?
- centos python 安装
- R 语言开发环境搭建
- Netty 简单样例分析(io传输的框架)
- 如何突破科研瓶颈?如何与导师自在相处?微软研究员们的读博心得
- JAVA多线程之synchronized和volatile实例讲解
- talib函数功能一览表
- 应届生求职应聘简历PPT模板
- SQL*Loader-704: 内部错误: ulconnect: OCIServerAttach [0] SQL*Loader-704: Internal error ulconnect: OCI
- 计算机网络安全叙述,计算机网络安全涉及
- js压缩图片--可以控制分辨率以及压缩后的图片质量
- netstat命令不可用,安装net-tools
- win10中安装JDK8以及环境配置
- 学习笔记_OSI模型
- Unable to render this definition
- flutter开发欠揍♎
- 一站式数智分析平台datasea
- 【Linux】概述(Unix和Linux的关系)
- 有关细粒度图像分析(Fine-Grained Image Analysis)
- 10 款开源的在线游戏,点开就能玩的那种