代码随想录——二叉树-12.平衡二叉树

news/2024/11/13 1:42:03/文章来源:https://www.cnblogs.com/neromegumi/p/18539434


image

自顶向下递归(前序遍历)

这种方法是一开始想到的,虽然ac了但是对于它的本质却不清不楚,不知道时间复杂度,不知道属于前序遍历。

思路

首先得到root节点的左右子树的深度(左右),若深度差绝对值大于1(中),则root为根的树不是平衡二叉树;
否则继续递归root的左右子树,其左右子树都是平衡二叉树时,root才是平衡二叉树。

代码

class Solution {
public:int depth(TreeNode* root){if(root == nullptr)return 0;return max(depth(root->left),depth(root->right)) + 1;}bool isBalanced(TreeNode* root) {if(root == nullptr)return true;int cha = depth(root->left) - depth(root->right);if(cha > 1 || cha < -1)return false;return isBalanced(root->left) && isBalanced(root->right);}};

复杂度

时间复杂度:O(n^2),n是节点个数

最坏情况,二叉树是满二叉树,需要遍历所有节点,时间复杂度O(n)
对于节点p,如果它的高度是d,则height(p)会被调用d次(即遍历到它的每一个祖先节点时)。而最坏情况下,二叉树是链式结构,高度为n,此时总时间复杂度为O(n^2)

自底向上递归(后序遍历)

思路

image

代码

class Solution {
public:int height(TreeNode* root){if(root == nullptr)return 0;int lheight = height(root->left);int rheight = height(root->right);   //左右子树不是平衡二叉树就返回-1if(lheight == -1 || rheight == -1)return -1;//以root为根的树不是平衡二叉树也返回-1if(abs(lheight - rheight) > 1) return -1;//以root为根的树是平衡二叉树,则返回以root为根的树的深度return max(lheight,rheight) + 1;}bool isBalanced(TreeNode* root) {return height(root) >= 0;}};

复杂度

image

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

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

相关文章

【论文系列】之 ---- CLIP

CLIP(Contrastive Language-Image Pre-Training) 从名字显而易见:语言-图像,预训练,主要用于学习图像 该模型的核心思想是使用大量图像和文本的配对数据进行预训练,以学习图像和文本之间的对齐关系 CLIP模型有两个模态,一个是文本模态,一个是视觉模态,包括两个主要部分…

[极客大挑战 2019]Havefun

页面一只猫,啥东西也没有,直接检查页面源码发现只有输入参数cat==dog就会输出一个值直接拿到flag

代码随想录——二叉树-11.完全二叉树的节点个数

思路 一、层序遍历,时间复杂度O(n) 二、利用完全二叉树性质,时间复杂度O(logn * logn)(小于O(n)) 完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置 完全二叉树要么1.是满二叉树 2.最后一层没满满二叉树计算节点数太方便了,直接用…

Rocky9系统安装PostgreSQL

官网 https://www.postgresql.org/环境查看安装 登录官网根据平台选择帮助文档sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf -qy module disable postgresql sudo dnf install -y po…

【GiraKoo】GLSurfaceView闪现黑屏的问题

Android下GLSurfaceView在显示正式内容之前,会有一个黑屏的过程。本文解释如何解决这个问题。【GiraKoo】GLSurfaceView闪现黑屏的问题 现象在Android平台,多个Activity之间进行切换。 使用GLSurfaceView进行描画,会有短暂的黑屏显示。对策设置GLSurfaceView的Surface的Form…

Mysql高可用架构方案

目录Mysql 介绍高可用结构主从模式主从模式介绍主从复制技术主从模式注意事项MHA(MasterHighAvailability)MHA模式介绍MHA工作流程MMM(Multi-MasterReplicationManagerForMysql)MGR(MysqlGroupReplication)总结 Mysql 介绍 Mysql是典型的开源关系型数据库,是许多网站、应…

postcss-px-to-viewport 移动端适配

以前做移动端项目的时候都是用rem来做适配,现在基本上都是通过viewport单位来做。 postcss-px-to-viewport就是一个将px单位转换为视口单位的 (vw, vh, vmin, vmax) 的 PostCSS 插件,它可以将你CSS中的px单位转化为vw,1vw等于1/100视口宽度。 1.安装 javascript代码解读 复…

支持多语言、多商店的商城,.Net7 + EF7领域驱动设计架构

推荐一个跨平台、模块化、可扩展且超快速的开源一体化电子商务平台。01项目简介 Smartstore 支持桌面和移动平台、多语言、多商店、多货币的商城,并支持SEO优化,支持无限数量的产品和类别、报表、ESD、折扣、优惠券等等。 还有一套全面的 CRM 和 CMS、销售、营销、付款和物流…

连接数据库-mysql

连接前的三个条件:下载好JDK环境、Mysql、数据库驱动jar包 jar包也去MySQL官网上下就可以 然后创建数据库,我是在Navicat上建的数据库然后创建的表。也尝试在小黑框那创建了但总出错。跟着up主改配置改了一通up主是成果了,我也没成功。。。、 然后在eclipse上新建项目,连上…

联影医疗王欢:智能管理驾驶舱推动业务闭环管理

在当今竞争激烈的市场环境下,市场的瞬息万变和客户需求的多样化,使得传统封闭式的经营管理模式难以为继,企业内部管理的复杂性也在不断加剧。许多企业在经营管理中普遍存在着管理效率低下、管理决策滞后、缺少闭环机制、目标缺乏协同、绩效信息黑匣等问题。 面对这些挑战,“…

代码语言模型是如何训练的:Qwen2.5-Coder 技术报告学习

Qwen2.5-Coder 是通义千问最新的代码语言模型,基于 Qwen2.5 的架构继续 pretrain 了 5.5T 的 token。通过细致的数据清洗、可扩展的合成数据生成和平衡的数据混合,Qwen2.5-Coder在展示令人印象深刻的代码生成能力的同时,还保留了通用的多功能性。本文根据官方的技术报告(Qw…

Codigger之配置LunarVim

Lunarvim是一款先进的集成开发环境(IDE),构建于Neovim之上,致力于为用户提供一个高效且个性化的编程平台。该环境融合了Neovim的核心优势,并增添了多项扩展功能,以支持诸如代码高亮、自动补齐、以及语言服务器协议(LSP)等特性,旨在为Codigger用户在Neovim中复现熟悉的…