博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Balanced Binary Tree 平衡二叉树
阅读量:6229 次
发布时间:2019-06-21

本文共 1380 字,大约阅读时间需要 4 分钟。

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

求二叉树是否平衡,根据题目中的定义,高度平衡二叉树是每一个节点的两个字数的深度差不能超过1,那么我们肯定需要一个求各个点深度的函数,然后对每个节点的两个子树来比较深度差,时间复杂度为O(NlgN),代码如下:

解法一:

public:    bool isBalanced(TreeNode *root) {        if (!root) return true;        if (abs(getDepth(root->left) - getDepth(root->right)) > 1) return false;        return isBalanced(root->left) && isBalanced(root->right);        }    int getDepth(TreeNode *root) {        if (!root) return 0;        return 1 + max(getDepth(root->left), getDepth(root->right));    }};

上面那个方法正确但不是很高效,因为每一个点都会被上面的点计算深度时访问一次,我们可以进行优化。方法是如果我们发现子树不平衡,则不计算具体的深度,而是直接返回-1。那么优化后的方法为:对于每一个节点,我们通过checkDepth方法递归获得左右子树的深度,如果子树是平衡的,则返回真实的深度,若不平衡,直接返回-1,此方法时间复杂度O(N),空间复杂度O(H),参见代码如下: 

解法二:

public:        bool isBalanced(TreeNode *root) {        if (checkDepth(root) == -1) return false;        else return true;    }    int checkDepth(TreeNode *root) {        if (!root) return 0;        int left = checkDepth(root->left);        if (left == -1) return -1;        int right = checkDepth(root->right);        if (right == -1) return -1;        int diff = abs(left - right);        if (diff > 1) return -1;        else return 1 + max(left, right);    }};

 本文转自博客园的博客,原文链接:

,如需转载请自行联系原博主。

你可能感兴趣的文章
教你 Shiro + SpringBoot 整合 JWT
查看>>
理解Underscore中的去抖函数
查看>>
说说在 Spring AOP 中如何实现类加载期织入(LTW)
查看>>
一个很好用的监控web前端DOM解析完成插件
查看>>
python-path配置问题解决
查看>>
python-22_FTP之验证功能
查看>>
创建使用 framework和 a静态库
查看>>
Java的Interrupt与线程中断
查看>>
最好的Linux发行版
查看>>
面试官问你“有什么问题问我吗?”,你该如何回答?
查看>>
磊哥评测之数据库:腾讯云MongoDB vs自建
查看>>
Git 常用命令集
查看>>
小心钱财不翼而飞!微信绑定银行卡的有必要点击这个按钮!
查看>>
组件调用错误,路径问题
查看>>
Python 基础起步 (九) 条件语句 if elif else 其实很简单
查看>>
Hello, Node.js!
查看>>
JavaWEB开发14——ajax
查看>>
Vue2.0 + ElementUI 手写权限管理系统后台模板(二)——权限管理
查看>>
利用AudioContext来实现网易云音乐的鲸鱼音效
查看>>
简述原型链是什么,有什么用处?若想访问一个对象的原型,应该使用什么方法?...
查看>>