编程题-----判断树是否平衡(常规解法+优化)
发布日期:2022-02-21 17:40:29
浏览次数:68
分类:技术文章
本文共 861 字,大约阅读时间需要 2 分钟。
不多说,首先给出我的常规解法:递归访问整棵树,计算子树的高度
int depth(TreeNode* root) { if(root==NULL) return 0; return max(depth(root->left),depth(root->right))+1; } bool isBalanced(TreeNode *root) { if(root==NULL) return true; if(isBalanced(root->left)&&isBalanced(root->right)) { return abs(depth(root->left)-depth(root->right))>1?false:true; } return false; }
很明显:节点高度会被重复计算,效率不高,时间复杂度为O(nlgn);
改进算法如下:
int depth(TreeNode* root) { if(root==NULL) return 0; int leftlen=depth(root->left); int rightlen=depth(root->right); if(leftlen==-1||rightlen==-1) return -1; return abs(leftlen-rightlen)>1?-1:max(leftlen,rightlen)+1; } bool isBalanced(TreeNode *root) { if(root==NULL) return true; return depth(root)==-1?false:true; }
转载地址:https://blog.csdn.net/weixin_40599276/article/details/100078159 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月17日 20时26分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Platinum Maestro运动控制器 —— PVT模式笔记
2019-04-28
Platinum Maestro运动控制器 —— 运动程序笔记
2019-04-28
PID算法原理及参数调整原则
2019-04-28
Platinum Maestro运动控制器 ——速度位置等数据的获取
2019-04-28
Platinum Maestro运动控制器 ——Ssh登录控制器
2019-04-28
基础笔记2 —— 不损失精度的前提下浮点数拆分成整型的方法浅析
2019-04-28
数据类型在内存中的存储
2019-04-28
基础笔记1 —— float型数据与其他类型数据的转换问题
2019-04-28
基础笔记3 —— 关于大小端数据存储方式的转换及测试说明
2019-04-28
Platinum Maestro运动控制器 ——修改控制器IP
2019-04-28
关于Elmo驱动器Main Feedback error错误处理
2019-04-28
古月居ROS入门21讲笔记
2019-04-28
ARM 指令集的基础指令
2019-04-28
OpenCV——凸轮廓与Douglas-Peucker算法
2019-04-28
OpenCV——直线检测
2019-04-28
OpenCV——圆检测
2019-04-28
NoSQL数据库与关系型数据库
2019-04-28
NoSQL分布式模型:分片和复制
2019-04-28