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

LEETCODE 49场周赛 第K大完美二叉子树的大小

这个题目本身很直接,谨以此题来熟练一下二叉树的相关操作的使用,好久没写二叉树的代码了,不熟练了有点,题目如下:题目链接传送门在这里题目链接传送门
给你一棵 二叉树 的根节点 root 和一个整数k。

返回第 k 大的 完美二叉子树的大小,如果不存在则返回 -1。

完美二叉树 是指所有叶子节点都在同一层级的树,且每个父节点恰有两个子节点。

子树 是指树中的某一个节点及其所有后代形成的树。

分析:其实简单分析一下哈,这个完美二叉树就是我们的完全二叉树的定义嘛,所以我们只需要判定每个节点是否是完全二叉树,然后返回其高度h,就可以根据这个高度h得到其节点个数为(2 ^h - 1),然后进行排序就好。

具体代码如下:(实现细节详见代码注释)

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public://这个函数是去判断该子树是否是完全二叉树的,是的话就返回子树高度,否则返回-1int getHeight(TreeNode* root) {if (!root) return 0;int leftHeight = getHeight(root->left);int rightHeight = getHeight(root->right);if (leftHeight == -1 || rightHeight == -1 || leftHeight != rightHeight) {return -1; // 不是完美二叉树}return leftHeight + 1; // 是完美二叉树,高度加1}// 递归函数来计算完美二叉子树的大小,根据height返回 完全二叉树的高度int getPerfectSubtreeSize(TreeNode* root) {int height = getHeight(root);if (height == -1) {return 0; // 不是完美二叉树,大小为0}// 完美二叉树的节点总数为 2^height - 1return (1 << height) - 1;}// 主函数int kthLargestPerfectSubtree(TreeNode* root, int k) {vector<int> sizes;findPerfectSubtrees(root, sizes);// 对所有完美二叉子树的大小进行排序sort(sizes.rbegin(), sizes.rend());// 返回第 k 大的完美二叉子树的大小return (k <= sizes.size()) ? sizes[k - 1] : -1;}private:// 辅助函数,递归查找所有完美二叉子树,遍历整个二叉树,采用的是前序遍历,把所有合法节点的节点数目保存到sizes数组里面void findPerfectSubtrees(TreeNode* root, vector<int>& sizes) {if (!root) return;int size = getPerfectSubtreeSize(root);if (size > 0) {sizes.push_back(size);}// 继续递归查找左右子树findPerfectSubtrees(root->left, sizes);findPerfectSubtrees(root->right, sizes);}};

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

相关文章:

  • 消息人士称NVIDIA GeForce RTX 5090 GPU的价格不会与4090差距很大
  • 【React】React17+配置Babel实现无需导入React就可以使用jsx
  • 10个常用的大模型提示语式
  • 【MATLAB代码】TDOA最小二乘求三维下的位置(1主锚点、3副锚点)
  • IEC104规约的秘密之十一----扩展报文之文件传输
  • 沃尔玛死磕电商,上半年在线杂货业务增长强劲,Walmart沃尔玛产品采集上架刊登工具
  • OpenFeign中GET与POST请求的参数传递技巧
  • GC5931 在工业风扇中的应用分析且可替代A5931/Alegro
  • 如何在cmd中打开指定文件夹路径(三种方法)
  • 数据结构与算法实验7——查找表
  • RHEL: rpm2cpio: signature hdr data: BAD, no. of bytes(19987) out of range
  • 手机屏幕上的OCR识别方案
  • 全面掌控AI大模型:从理论到实践的完整学习路线,看这篇就够了
  • Redis登录校验
  • OpenAI终于open了,Swarm开源来袭!【视频教材+源码】
  • 读书笔记:《Redis设计与实现》之集群
  • 2024全面大模型学习指南
  • Qt在iOS平台上的编译配置与打包发布,详细流程
  • 哪个牌子的护眼台灯防蓝光效果好?五款对孩子比较好的护眼台灯
  • 《大模型应用开发:RAG入门与实战》从基础概念到实战操作,手把手教你构建功能齐全的RAG项目。