【小浩算法 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值