c++可视化打印树
#include <iostream>
#include <string>// 定义节点结构体
struct Node {std::string data;Node* left;Node* right;Node(const std::string& data) : data(data), left(nullptr), right(nullptr) {}
};// 递归打印树
void printTree(Node* root, std::string indent = "") {if (root == nullptr) {return;}std::cout << indent << "|-- " << root->data << std::endl;if (root->left != nullptr) {std::string newIndent = indent + " ";printTree(root->left, newIndent);}if (root->right != nullptr) {std::string newIndent = indent + " ";printTree(root->right, newIndent);}
}int main() {// 创建树Node* root = new Node("A");root->left = new Node("B");root->right = new Node("C");root->left->left = new Node("D");root->left->right = new Node("E");root->right->left = new Node("F");root->right->right = new Node("G");// 打印树printTree(root);// 清理内存delete root;return 0;
}
这段代码定义了一个简单的二叉树结构体
Node和一个递归函数
printTree来打印树。它演示了如何使用C++创建和操作树形结构,并以可视化的方式打印出来。在
main函数中,我们创建了一棵树,并调用
printTree函数来打印它。最后,我们释放了为树节点分配的内存。
#include <iostream>
#include <string>
// 定义节点结构体
struct Node {
std::string data;
Node* left;
Node* right;
Node(const std::string& data) : data(data), left(nullptr), right(nullptr) {}
};
// 递归打印树
void printTree(Node* root, std::string indent = "") {
if (root == nullptr) {
return;
}
std::cout << indent << "|-- " << root->data << std::endl;
if (root->left != nullptr) {
std::string newIndent = indent + " ";
printTree(root->left, newIndent);
}
if (root->right != nullptr) {
std::string newIndent = indent + " ";
printTree(root->right, newIndent);
}
}
int main() {
// 创建树
Node* root = new Node("A");
root->left = new Node("B");
root->right = new Node("C");
root->left->left = new Node("D");
root->left->right = new Node("E");
root->right->left = new Node("F");
root->right->right = new Node("G");
// 打印树
printTree(root);
// 清理内存
delete root;
return 0;
}
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#define MAX 200
using namespace std;
typedef struct TreeNode {
char c;
int depth;
struct TreeNode * FirstChild;
struct TreeNode * NextSibling;
} *TREE, tree;
/* 传入参数为:
* 层序输入的字符串
* 根节点T(实际上没有存数据,深度已设为零) */
TREE BuildTree (char s[], TREE root) {
queue <TREE> Q;
stack <TREE> S;
S.push(root);
int depth = 0; //用于更新当前遍历到的深度
/* 将字母改成树的节点
* 并依次将每个节点入队 */
for(int i = 0; s[i] != '\0'; i++) {
switch (s[i]) {
case ',':
break;
case '(':
depth++;
break;
case ')':
depth--;
break;
default: //只有可能为节点字母了
TREE temp = (TREE)malloc(sizeof(tree)); //申请一个节点
temp->c = s[i];
temp->depth = depth; //记录节点的深度
temp->FirstChild = temp->NextSibling =NULL;
Q.push(temp); //节点入队
}
}
/* 利用栈建树
* 注意:最开始栈内已经加入一个元素root,其深度为0
* 其他节点已经在队列中,深度 >= 1 */
while(!Q.empty()) {
//依次将队头节点与栈顶结点比较:
if(Q.front()->depth > S.top()->depth) {
S.top()->FirstChild = Q.front(); //队头挂在栈顶的左儿子
S.push(Q.front()); //队头入栈
Q.pop(); //出队
}
else if(Q.front()->depth == S.top()->depth) {
S.top()->NextSibling = Q.front(); //队头挂在栈顶的右兄弟
S.push(Q.front()); //队头入栈
Q.pop(); //出队
}
else {
//出栈,一直到栈顶节点深度不小于队头节点
while (Q.front()->depth < S.top()->depth) {
S.pop();
}
}
}
return root;
/* root是传入的参数
* 通过此函数 已经将待建立的树
* 完整地挂在了root的左儿子上 */
}
/* 传入树的某个节点 */
void printLine(TREE T) {
for (int i = 0; i < T->depth - 1; i++) {
printf(" "); //多一层则多四个空格凹进
}
printf("%c\n", T->c);
}
/* 传入树的根节点 */
void printTree(TREE root) {
//递归的终点,空树不打印
if (!root) {
return;
}
//打印根节点
printLine(root);
/* 依次打印每个子树 */
TREE p = root->FirstChild;
while(p) {
printTree(p);
p = p->NextSibling;
}
}
int main () {
char s[MAX];
scanf("%[^\n]",s);
//gets(s);
TREE T = (TREE) malloc(sizeof(tree));
T->depth = 0;
T->FirstChild = T->NextSibling = NULL;
//建树
TREE root = BuildTree(s, T)->FirstChild;
//输出树
printTree(root);
return 0;
}
相关文章:
c++可视化打印树
#include <iostream> #include <string>// 定义节点结构体 struct Node {std::string data;Node* left;Node* right;Node(const std::string& data) : data(data), left(nullptr), right(nullptr) {} };// 递归打印树 void printTree(Node* root, std::string …...
ElementUI 快速入门:使用 Vue 脚手架搭建项目
文章目录 一 . ElementUI 的基本安装1.1 通过 Vue 脚手架创建项目1.2 在 vue 脚手架中安装 ElementUI1.3 编写页面 ElementUI 是 Vue.js 的强大 UI 框架,让前端界面开发变得简单高效。本教程将带你从安装到实战,快速掌握 ElementUI 的核心技巧。 核心内容…...
算法打卡:第十一章 图论part02
今日收获:岛屿数量(深搜),岛屿数量(广搜),岛屿的最大面积 1. 岛屿数量(深搜) 题目链接:99. 岛屿数量 思路:二维遍历数组,先判断当前…...
广度优先搜索算法及其matlab程序详解
#################本文为学习《图论算法及其MATLAB实现》的学习笔记################# 算法用途 广度优先搜索算法的应用 算法思想 广度优先搜索算法的步骤: ①,标号,令。 ②当所有标号为 的、与顶点 相关联的边的端点都已标号时,则停止;否则,把与 相关联的边的未标号的…...
力扣 438找到字符串中所有字母异位词
https://leetcode.cn/problems/find-all-anagrams-in-a-string/ 题目描述 题目分析 异位词所表示的空间 P \text{P} P 即一字符串的所有排列,记 s i \bold{s_i} si为以 s [ i ] s[i] s[i]开头的长度为 plen \text{plen} plen的 s s s子串 故本题可理解为求解 A n s Ans Ans…...
图像滤波---各项异性扩散滤波使用笔记及代码
图像滤波---各项异性扩散滤波使用笔记及代码 一、文章内容介绍二、各项异性扩散滤波和各项同性滤波1、各项同性滤波2、各项异性扩散滤波3、各项异性和各项同性的对比 三、各项异性扩散滤波的原理介绍四、各项异性扩散滤波公式五、公式中的参数使用说明1、扩散速率 λ \lambda λ…...
用Go语言构建健壮的并发系统:深入理解错误传播与处理
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在当今的软件开发中,构建并发和分布式系统已经成为常态。然而,在这些系统中,错误的发生频率高且定位困难。如果我们能够深入考虑错误如何在系统中传播,以及最终如何呈现给用户,那么我们就能为自己、团队和用…...
掌握C#中的动态规划技术
C# 中的动态规划(Dynamic Programming, DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划通常用于优化问题,特别是那些具有重叠子问题和最优子结构性质的问题…...
C语言进阶【5】---数据在内存中的存储【2】(小数存储很难吗?)
本章概述 本章引要练习 浮点数的存储浮点数的取出小补充题目解析彩蛋时刻!!! 本章引要 常见的浮点数:3.1415,1E10等。其中,1E10是科学计数法的形式,它也就等于1*10^10。小数数据类型࿱…...
如何更新至CDS-Beta下载ERA5数据
数据下载网站 api 更新 api setup 更新api 2024年9月26日起老版的CDS将被停用,会搬迁到CDS-beta上。 创建一个新的CDS-beta账户,也可以使用之前的ECMWF账户。https://cds-beta.climate.copernicus.eu/vi ~/.cdsapirc ,登陆https://cds-bet…...
SQL编程题复习(24/9/20)
练习题 x25 10-120 统计每个班级期末成绩的最高分(Max),显示班级名称、期末最高成绩10-121 显示没有班导师的班级名称、院系名称10-122 将电子信息1班(班级编号:08)的班主任编号改为李丽清老师的编号(PTA题目表述错误&…...
react crash course 2024 (1)理论概念
state的作用 react hooks 而无需写一个class jsx 样式用 spa...
有关JS下隐藏的敏感信息
免责声明:本文仅做分享! 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用: 小结: Ja…...
Kafka 基于SASL/SCRAM动态认证部署,kafka加账号密码登录部署
文章目录 前言下载 kafka安装启动zookeeper添加账号密码 启动kafka修改kafka配置文件增加jaas授权文件修改启动文件,启动kafka检查是否部署成功 offset explore 连接 前言 其实挺简单的几个配置文件,问大模型一直没说到点上,绕晕了。SASL/SC…...
富格林:积攒经验阻挠欺诈套路
富格林指出,现货黄金这些年可谓是表现出色,相信上车现货黄金的投资者,都或多或少分得一杯满意的羹。不过话又说回来,不是所有投资者都可以轻松在现货黄金中获利,尤其是对投资小白而言,如果没有积累知识阻挠…...
51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)
作者:Whappy 时间:2024.9.20 总结一下!基础实验到这儿里就圆满结束,历经25天,将51单片机学完并亲自手敲代码近5000行,在手敲代码过程中,明显感觉的看和敲,明显就是不同的感觉&…...
云手机的便捷性和安全性体现在哪?
随着5G技术的迅速发展,云手机在游戏、电商以及新媒体营销等领域中的应用日益广泛。它不仅能够显著降低成本、提升效率,还随着边缘计算和云技术的进步,展现出无限的增长潜力。 云手机的便捷性体现在哪里? 云手机的便捷性毋庸置疑。…...
漫谈由标准输入\输出\错误输出引发的思考
标准输入|输出|错误输出 在Unix\Linux体系中,一个进程通常自带有标准输入、标准输出、标准错误输出等三个文件描述符。 如果从对称的观点来看,它确实长的有点奇怪,但它背后隐藏了什么样的知识和道理呢? 从图灵机模型谈起 以前…...
利用 IDEA 快速管理 k8s 集群
简介 前置条件: minikube 已安装,JetBrains k8s 官方插件已安装,Helm 已安装,kubectl 已安装 打开插件面板 检查可执行文件 添加配置文件 添加集群 验证...
【自然语言处理】实验三:新冠病毒的FAQ问答系统
目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2:进行问题/问题列表处理(正则化,分词) 1.3功能模块3:处理输入的问题 1.4功能模块4:计算输入问题与问题…...
BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南
BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否经常需要从B站视频中提取字幕内…...
寒冬降临:当资本撤出AI测试赛道
2026年初,全球资本市场对AI技术的狂热投资骤然降温。随着VC基金转向更保守的资产配置,依赖融资的AI测试工具开发商面临生存危机:初创公司批量裁员,开源项目停止维护,企业采购的智能测试平台因无法续约沦为“断线木偶”…...
seo优化机构怎样选择才合适_什么是seo优化机构
SEO优化机构怎样选择才合适_什么是SEO优化机构 在当今的数字化时代,拥有一个高效的网站已经不再是企业竞争力的唯一标准,更重要的是这个网站能够在搜索引擎上获得良好的排名。这就是搜索引擎优化(SEO)的重要性所在。选择一个合适…...
QtScrcpy全场景投屏效率指南:跨设备协作与多终端控制解决方案
QtScrcpy全场景投屏效率指南:跨设备协作与多终端控制解决方案 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/Qt…...
魔兽争霸3终极优化指南:如何解锁180fps帧率限制并解决现代硬件兼容性问题
魔兽争霸3终极优化指南:如何解锁180fps帧率限制并解决现代硬件兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经…...
一篇大模型Agents工作流优化最新综述
过去,人们总希望一个LLM直接把任务做完;现在,一个更现实的方向正在浮现——针对不同任务设计不同工作流,并让系统在执行前、执行中乃至执行后持续优化这条链路。 近日,Rensselaer Polytechnic Institute(RP…...
告别教材下载烦恼:国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取
告别教材下载烦恼:国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地…...
终极指南:如何让2012-2015年老款Mac安装最新macOS系统
终极指南:如何让2012-2015年老款Mac安装最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您的2012-2015年老款Mac是否已被苹果官方抛…...
别再为联合仿真头疼了!手把手教你用Amesim 2019和Matlab 2022b配置S-Function(Win10环境)
从零搭建Amesim与Matlab联合仿真环境:避坑指南与实战技巧 联合仿真技术已成为多物理场系统设计的黄金标准,但配置过程却让无数工程师在深夜的办公室里抓狂——编译器版本冲突、环境变量设置错误、接口编译失败,每一个环节都可能成为项目进度的…...
Android定时开关机的5种实现方式对比:哪种最适合你的设备?
Android定时开关机技术全景解析:从系统API到硬件层控制的深度实践 在智能设备管理领域,定时开关机功能一直是工业控制、物联网终端和定制化Android设备的核心需求之一。想象一下,你正在部署一批智能售货机,需要在营业时间自动唤醒…...
