【小浩算法 DFS cpp题解】构造二叉树、打印二叉树、递归求树深度、实现DFS

目录

  • 前言
  • 实现思路
    • 一些疑问的解决
  • 我的代码

前言

今天第一次做一下cpp的树的算法,还是遇到了不少问题的,对树的学习其实在考研期间会比链表和数组少很多,其中最关键的要学会用递归。求深度也好,DSF也好,构造树也好,都用递归。

实现思路

一些疑问的解决

  1. 为什么不在构造函数中创建树?

最初我考虑在构造函数初始化树的值,但是后面发现还是有问题,搜了一下,gpt的回答是这样的。

构造函数在C++中是一种特殊的成员函数,它在创建类的对象时被自动调用,用于初始化新创建的对象。> 在我们的例子中,TreeNode类的构造函数已经被用来初始化TreeNode对象的val,left和right成员。这个构造函数非常简单,只接受一个参数(节点的值),并默认将left和right指针设置为NULL。
但是,如果你想在构造函数中创建整个二叉树,那可能会有些复杂。因为构造函数在创建新对象时自动被调用,所以你不能在构造函数中直接调用它自己(这会导致无限递归)。你也不能在构造函数中改变已经创建的对象,因为构造函数的目的是初始化新对象,而不是修改已有的对象
所以,虽然你可以在构造函数中进行一些初始化操作,但是创建整个二叉树通常需要一个单独的函数,像我们之前提供的buildTree函数。然后你可以在你的代码中调用这个函数来创建二叉树,而不是在构造函数中进行这个操作。

我的代码

#include <iostream>
#include<algorithm>
#include<cmath>
#include <queue> 
using namespace std;struct node {int date;char info;node* left;node* right;
};//以递归的方式构建一棵树
void createTree(node*& t) {char str;cin >> str;if (str == '#') {t = NULL;}else {t = new node;//为t开辟空间t->info = str;createTree(t->left);createTree(t->right);}
}//树的深度
int depth(node* root) {if (root == nullptr) {return 0;}int left = depth(root->left);int right = depth(root->right);return max(left, right) + 1;
}//打印一棵树满二叉树,只能打印满二叉树,节点数目最好不要超过10
void print(node*& root) {//存放打印的二叉树char str[10][100] = {};queue<node*> q;int h = depth(root);q.push(root);int index = 0;while (!q.empty()) {int size = q.size();//存放每一层的节点vector<char> list;for (int i = 0; i < size; i++) {node* temp = q.front();q.pop();list.push_back(temp->info);//cout << temp->info;if (temp->left != nullptr) {q.push(temp->left);}if (temp->right != nullptr) {q.push(temp->right);}}bool flag = true;int j = 0;//打印前面部分空白while (j <= 2 * h - 1 - index) {str[index][j] = ' ';j++;}//保持第一行居中if (index == 0) {for (int m = 0; m < h - 2; m++) {str[index][j++] = ' ';}}for (int k = 0; k < list.size(); k++) {//如果是一层最后一个节点if (k == list.size() - 1) {str[index][j++] = list[k];}else {//相邻左右子节点if (k % 2 == 0) {str[index][j++] = list[k];for (int l = 0; l < 3 + 2 * (h - index / 2 - 1); l++) {str[index][j++] = ' ';}}else {str[index][j++] = list[k];str[index][j++] = ' ';}}}index += 2;//cout << endl;}for (int i = 0; i < 10; i++) {if (i % 2 == 1) {for (int j = 0; j < 100; j++) {str[i][j] = ' ';}}}for (int i = 0; i < 10; i++) {if (i % 2 == 0) {for (int j = 0; j < 100; j++) {if (str[i][j] - '0' >= 0 && str[i][j] - '0' <= 9 && i < 2 * h - 2) {str[i + 1][j - 1] = '/';str[i + 1][j + 1] = '\\';}}}}for (int i = 0; i < 10; i++) {for (int j = 0; j < 100; j++) {cout << str[i][j];}cout << endl;}
}void DeepFirstSearch(node *root) {if (root == NULL) {return;}else {cout << root->info << ' ';DeepFirstSearch(root->left);DeepFirstSearch(root->right);}}int main() {node* T;createTree(T);cout << "树的深度:" << depth(T) << endl;print(T);DeepFirstSearch(T);return 0;
}

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

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

相关文章

欧科云链:为什么减半对比特币生态的影响正在逐步“减弱”?

出品&#xff5c;OKG Research 作者&#xff5c;Jason Jiang 欧科云链OKLink数据显示&#xff0c;比特币于区块高度840000&#xff08;北京时间2024年4月20日8:09&#xff09;成功完成第四次减半&#xff0c;比特币挖矿奖励正式由6.25BTC减少至3.125BTC。此次减半之后&#x…

Spring MVC系列之九大核心组件

概述 Spring MVC是面试必问知识点其一&#xff0c;Spring MVC知识体系庞杂&#xff0c;有以下九大核心组件&#xff1a; HandlerMappingHandlerAdapterHandlerExceptionResolverViewResolverRequestToViewNameTranslatorLocaleResolverThemeResolverMultipartResolverFlashMa…

中电金信:深度解析|数字化营销运营体系搭建

如何更好更快地梳理好体系搭建思路&#xff0c;稳步实现落地&#xff1f;下文将为大家明确搭建的推进步骤、执行要点&#xff0c;帮助商业银行理顺数字化营销运营体系的“点”“线”“面”~ 与所有转型的曲折、阵痛等特征一样&#xff0c;商业银行构建数字化营销运营体系过程中…

OceanBase 分布式数据库【信创/国产化】- OceanBase V4.3 里程碑版本

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase V4.3 里程碑版本前言OceanBase 数据更新架构4.3.0 版本是 OceanBase 迈向实时分析 AP 场景的重要里程特性:TP & AP一体化的产品形态新向量化引擎物化视图MySQL 模式下 Online DDL 扩充全…

C#算法之快速排序

算法释义&#xff1a;朋友们&#xff0c;我们在上文中说到&#xff0c;归并算法是一种分治算法&#xff0c;同样的&#xff0c;快速排序也是一种分治算法。所谓分治算法&#xff0c;原理上来说&#xff0c;是将规模为N的问题分解为若干个规模为较小的M的问题&#xff0c;这些子…

URL路由基础与Django处理请求的过程分析

1. URL路由基础 对于高质量的Web应用来讲&#xff0c;使用简洁、优雅的URL设计模式非常有必要。Django框架允许设计人员自由地设计URL模式&#xff0c;而不用受到框架本身的约束。对于URL路由来讲&#xff0c;其主要实现了Web服务的入口。用户通过浏览器发送过来的任何请求&am…

PyQt5中的QTablewidget

环境 PyQt5 VSCode Qt Designer生成界面 在VSCode的资源管理器中&#xff0c;右键选择 PYQT:New Form&#xff0c;打开Qt Designer 选择新建Dialog without Buttons&#xff0c;点击 创建 在左侧的Item Widgets中将 Table Widget拖入Dialog窗体中。 得到界面 将文件保存…

CH4INRULZ-v1靶机练习实践报告

CH4INRULZ-v1靶机练习实践报告 1 安装靶机 靶机是.ova文件&#xff0c;需要用VirtualBox打开&#xff0c;但我习惯于使用VMWare,因此修改靶机文件&#xff0c;使其适用于VMWare打开。 解压ova文件&#xff0c;得到.ovf文件和.vmdk文件。直接用VMWare打开.ovf文件即可。 2 夺…

Go语言 Interface(接口)

基本介绍 Go 语言提供了另外一种数据类型即接口&#xff0c;它把所有的具有共性的方法定义在一起&#xff0c;任何其他类型只要实现了这些方法就是实现了这个接口。接口可以让我们将不同的类型绑定到一组公共的方法上&#xff0c;从而实现多态和灵活的设计。Go 语言中的接口是…

Oceanbase体验之(一)运维管理工具OCP部署(社区版4.2.2)

资源规划建议 ocp主机1台 内存:64G CPU1:2C及以上 硬盘大于500G observer服务器3台 内存32G CPU&#xff1a;4C以上 硬盘大于1T 建议存储硬盘与操作系统硬盘隔开实现IO隔离 一、OBD、OCP安装包准备 [rootobserver /]# chown -R admin:admin /software/ [rootobserver /]# …

四:物联网ARM开发

一&#xff1a;ARM体系结构概述 1&#xff1a;控制外设led灯还有一些按键这些就要用到gpio&#xff0c;采集传感器的数据需要adc进行转化数据格式&#xff0c;特殊的外设和传感器是通过特殊的协议接口去进行连接的比如一些轴传感器和主控器的连接是通过spi&#xff0c;IIC 控制…

UE_反射系统(虚幻编译系统)

UE_反射系统(虚幻编译系统) UCLASS、UFUNCTION、UPROPERTY UCLASS 宏的有效关键字 https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/GameplayArchitecture/Classes/Specifiers/ When declaring classes, Class Specifiers can be added to the declar…

更新!!!Unity移动端游戏性能优化简谱

UWA官方出品&#xff0c;结合多年优化经验撰写了《Unity移动端游戏性能优化简谱》&#xff0c;文章从Unity移动端游戏优化的一些基础讨论出发&#xff0c;例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题&#xff0c;并展示了如何使用UWA的性能检测工…

mxnet gluon GRU 文档

mxnet.gluon.rnn.GRU官方文档 以下是一个使用的简单用例&#xff0c;详细信息前往官网 # hidden_size 100 num_layer 3 layer mx.gluon.rnn.GRU(100, 3) layer.initialize() # seq_len 5 batch_size 3 input_size 10 input mx.nd.random.uniform(shape(5, 3, 10)) # by…

(MSFT.O)微软2024财年Q3营收619亿美元

在科技的浩渺宇宙中&#xff0c;一颗璀璨星辰再度闪耀其光芒——(MSFT.O)微软公司于2024财政年度第三季展现出惊人的财务表现&#xff0c;实现总营业收入达到令人咋舌的6190亿美元。这一辉煌成就不仅突显了微软作为全球技术领导者之一的地位&#xff0c;更引发了业界内外对这家…

AIX7环境上一次艰难的Oracle打补丁经历

系统环境 AIX &#xff1a;7200-05-03-2148 Oracle&#xff1a;11.2.0.4 PSU: 11.2.0.4.201020&#xff08;31718723&#xff09; perl:5.28 问题一&#xff1a;AUTO patch #/u01/app/11.2.0/grid/OPatch/opatch auto /tmp/31718723 错误信息如下&#xff1a;匹配mos 2516761.1…

C语言读数据+遍历行数程序|Visual studio 2022

读数据遍历行数程序 记录一个度数遍历行数的程序 FILE* file2; int row2 0; file2 fopen("D://sins_mat2.txt", "r"); // file1 fopen("D://ga_mat2.txt", "r"); if (file2 NULL) {printf("open file1 failed.\n");re…

Kafka 3.x.x 入门到精通(05)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;05&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.5 存储消息2.6 消费消息2.6.1 消费消息的基本步骤2.6.2 消费消息的基本代码2.6.3 消费消息的基本原理2.6.3.1消费者组2.6.3.1.1 消费…

美国洛杉矶站群服务器如何提高网站排名?

美国洛杉矶站群服务器怎么样?美国洛杉矶站群服务器如何提高网站排名?Rak部落小编为您整理发布美国洛杉矶站群服务器如何提高网站排名? 美国洛杉矶站群服务器可以通过以下几种方式帮助提高网站排名&#xff1a; - **提升网站性能**&#xff1a;美国站群服务器通常配备高速CPU…

LLM学习笔记-5

目录 1.多层神经网络的实现2. 训练轮次示例3. 保存并加载模型4. 使用GPU加速训练5. 使用上面所教&#xff0c;进行一次训练 摘要&#xff1a;今天想整理一下Pytorch常用操作&#xff0c;以便以后进行预习&#xff08;不是&#xff09; 1.多层神经网络的实现 这是常用的操作&a…