当前位置: 首页 > news >正文

C++ 判断是不是平衡二叉树

一:题目

      输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

      平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

       样例解释:

二:实现: 

     解题思路:

  1. 使用递归来遍历每个节点,计算左右子树的高度。
  2. 如果左右子树的高度差超过 1,直接返回 false。
  3. 如果某一子树不是平衡的,直接返回 false。
  4. 同时递归地返回当前子树的高度。
#include <iostream>
#include <algorithm>
#include <functional>struct TreeNode
{int val;TreeNode* left; TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};bool isBalanced(TreeNode* root)
{std::function<int(TreeNode*)> height = [&](TreeNode* node) -> int {if (node == nullptr){return 0;}int leftHeight = height(node->left);if (leftHeight == -1) return -1;int rightHeight = height(node->right);if (rightHeight == -1) return -1;if (std::abs(leftHeight - rightHeight) > 1){return -1;}return std::max(leftHeight, rightHeight) + 1;};return height(root) != -1; 
}int main()
{TreeNode* root = new TreeNode(1);root->left = new TreeNode(2);root->right = new TreeNode(3);root->left->left = new TreeNode(4);root->left->right = new TreeNode(5);//root->left->left->left = new TreeNode(6);// 判断树是否平衡if (isBalanced(root)) {std::cout << "The tree is balanced." << std::endl;}else {std::cout << "The tree is not balanced." << std::endl;}
}


http://www.mrgr.cn/news/68102.html

相关文章:

  • 高防IP能够防御哪些网络安全问题呢?
  • spring-data-jpa 一对多,多对一,多对多
  • 【学习笔记】SAP ABAP——OPEN SQL(一)【INTO语句】
  • 软件测试人员必问的十大面试题..
  • C#-拓展方法
  • 如何在 Java 中使用 Canal 同步 MySQL 数据到 Redis
  • 【fiddler】用fiddler实现手机抓包
  • 华为OD机试 - 学生排名(Java 2024 E卷 100分)
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • move_base
  • D365 无法在数据被选择或插入到另一个事务作用域中的缓冲区上调用 NEXT、update() 或 delete()
  • Visual Studio Code从安装到正常使用
  • 在鱼皮的模拟面试里面学习有感
  • 代码中的设计模式-策略模式
  • LLMs之RAG:《LightRAG: Simple and Fast Retrieval-Augmented Generation》翻译与解读
  • MDC(重要)
  • 06 网络编程基础
  • STM32Cube高效开发教程<高级篇><FreeRTOS>(十二)-----互斥量使用例程
  • YoloV10改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码
  • OpenResty 1.27.1.1 已经正式发布
  • 市场营销应该怎么学?
  • 人工智能将如何塑造下一代网络威胁
  • RabbitMQ 高级特性——消息分发
  • 异常(JAVA笔记第三十二期 )
  • 232转485模块测试
  • lua入门教程:数字