首页 > 其他分享 >平衡二叉树,二叉树的最大深度

平衡二叉树,二叉树的最大深度

时间:2024-09-08 17:51:39浏览次数:11  
标签:right TreeNode int nullptr que 二叉树 深度 平衡 root

#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
class TreeNode {
public:
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int value) : val(value), left(nullptr), right(nullptr) {

	}
};
TreeNode* BulidTreeNode(vector<int>& vec, int index) {
	if (index >= vec.size() || vec[index] == -1) {
		return nullptr;
	}
	TreeNode* root = new TreeNode(vec[index]);
	root->left = BulidTreeNode(vec, index * 2 + 1);
	root->right = BulidTreeNode(vec, index * 2 + 2);
	return root;
}
void MidSearch(TreeNode* root) {
	if (root == nullptr) {
		return;
	}
	MidSearch(root->left);
	cout << root->val << endl;
	MidSearch(root->right);
}
// 层序遍历二叉树
void BFS(TreeNode* root) {
	bool leaf = false;
	TreeNode* l = root;
	TreeNode* r = root;
	queue<TreeNode* > que;
	que.push(root);
	while (!que.empty()) {
		for (int i = 0; i < que.size(); i++) {
			TreeNode* temp = que.front();
			cout << temp->val << endl;
			que.pop();
			if (temp->left) {
				que.push(temp->left);
			}
			if (temp->right) {
				que.push(temp->right);
			}
		}
	}
}
bool IsBSearsh(TreeNode* root) {
	bool leaf = false;
	TreeNode* l = root;
	TreeNode* r = root;
	queue<TreeNode* > que;
	que.push(root);
	while (!que.empty()) {
		for (int i = 0; i < que.size(); i++) {
			TreeNode* tmp = que.front();
			que.pop();
			if (tmp->left) {
				que.push(tmp->left);
			}
			if (tmp->right) {
				que.push(tmp->right);
			}
			if (
				(leaf && !(l == nullptr && r == nullptr))
				||
				(l == nullptr && r != nullptr)
				) {
				return false;
			}
			if (l == nullptr && r == nullptr) {
				leaf = true;
			}
		}
	}
	return true;
}
int TreeHeight(TreeNode* root) {
	if (root == nullptr) {
		return 0;
	}
	return max(TreeHeight(root->left), TreeHeight(root->right)) + 1;
}
bool IsBalance(TreeNode* root) {
	if (root == nullptr) {
		return true;
	}
	int leftHeight = TreeHeight(root->left);
	int rightHeight = TreeHeight(root->right);
	if (
		abs(leftHeight - rightHeight)
		&&
		IsBalance(root->left)
		&&
		IsBalance(root->right)) {
		return true;
	}
}
int MaxDepth(TreeNode* root) {
	if (root == nullptr) {
		return 0;
	}
	return max(MaxDepth(root->left), MaxDepth(root->right)) + 1;
}
int main() {
	int n;
	cin >> n;
	vector<int> vec;
	for (int i = 0; i < n; i++) {
		int num;
		cin >> num;
		vec.push_back(num);
	}
	TreeNode* root = BulidTreeNode(vec, 0);
	//MidSearch(root);
	//BFS(root);
	//bool res = IsBSearsh(root);
	//bool res = IsBalance(root);
	int res;
	res = MaxDepth(root);
	cout << res << endl;
	return 0;
}

标签:right,TreeNode,int,nullptr,que,二叉树,深度,平衡,root
From: https://blog.csdn.net/2401_82661391/article/details/142030463

相关文章

  • 二叉树(这节主讲二叉树中的递归)
    目录二叉树的遍历:1.前序遍历:根->左子树->右子树2.中序遍历:左子树->根->右子树3.后序遍历:左子树->右子树->根4.层序遍历:从第一层到最后一层,一层一层地遍历二叉树的基本结构:二叉树中的常用接口:构造一个节点:构建二叉树:二叉树销毁:二叉树节点个数:二叉树叶子节点个数:二......
  • 算法入门-深度优先搜索2
    第六部分:深度优先搜索104.二叉树的最大深度(简单)题目:给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2第一种思路:感觉递......
  • Datawhale X李宏毅苹果书AI夏令营 第五期 深度学习入门 task3
      本次任务主要是了解模型在训练集或测试集上损失较大时的几大原因,了解改进的方向一、模型偏差   模型过于简单,未知参数函数的所有可能性的集合太小,让损失变低的函数不在模型可以描述的范围内;或者是模型的灵活性不够。这个时候重新设计一个模型,给模型更大的灵活性,将......
  • 个人学习笔记5-2:动手学深度学习pytorch版-李沐
    #深度学习##人工智能##神经网络#卷积神经网络(convolutionalneuralnetwork,CNN)6.4多输入多输出通道6.4.1多输入通道当输入包含多个通道时,需要构造一个与输入数据具有相同输入通道数的卷积核,以便与输入数据进行互相关运算。例子:两个输入通道的二维互相关运算的示例。阴......
  • 数据结构--二叉树(C语言实现,超详细!!!)
    文章目录二叉树的概念代码实现二叉树的定义创建一棵树并初始化组装二叉树前序遍历中序遍历后序遍历计算树的结点个数求二叉树第K层的结点个数求二叉树高度查找X所在的结点查找指定节点在不在完整代码二叉树的概念二叉树(BinaryTree)是数据结构中一种非常重要的树形......
  • 【LVI-SAM】激光点云如何辅助视觉特征深度提取
    LVI-SAM激光点云辅助视觉特征深度提取1.坐标系转换2.构建单位球面坐标系下的图像特征点和激光点云3.构建深度直方图并过滤激光点云4.最近邻搜索与深度估计5.深度投影与可视化总结这段代码的核心任务是将激光点云中的点与图像上的特征点进行对应,并计算图像特征......
  • 优爱酷酷采系统软件支持批量链接采集可指定深度、资源嗅探支持10大类资源,批量下载短视
    图文详情如何批量嗅探资源采集网页链接?图像音频视频JsCssHtmlJson文档字体压缩其它自动下载链接转换仿站批量格式转换.webP,.avif格式图片下载,优爱酷酷采系统-想采就采把握精彩留住美好下载:UiCool.cn 【优爱酷酷采系统】✅链接:https://www.alipan.com/s/LxDVE3pjN......
  • C语言深度剖析--不定期更新的第四弹
    void关键字void关键字不能用来定义变量,原因是void本身就被编译器解释为空类型,编译器强制地不允许定义变量定义变量的本质是:开辟空间而void作为空类型,理论上不应该开辟空间(针对编译器而言),即使开辟了空间,也只是作为一个占位符看待(针对Linux来说)所以,既然无法开辟空间,也......
  • 《足球经理2018》启动失败?深度解析为何《足球经理2018》会报GfxCore.dll错误及解决方
    《足球经理2018》启动失败并报告GfxCore.dll错误是一个常见的问题,这通常与游戏的图形处理相关文件缺失或损坏有关。下面是对这一问题的深度解析及解决方法:深度解析1.文件缺失或损坏:GfxCore.dll是《足球经理2018》及其相关图形处理功能所依赖的动态链接库文件。如果该文件......
  • 【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)
    数据操作N维数组是机器学习和神经网络的主要数据结构其中2-d矩阵中每一行表示每一行表示一个样本当维度来到三维的时候则可以表示成一张图片,再加一维就可以变成多张图片,再加一维则可以变成一个视频访问元素冒号表示从冒号左边的元素到冒号右边的前一个元素(开区间),其中......