110.[Leetcode]Balanced Binary Tree
2016-05-13 18:07
351 查看
题意:
判断一个二叉树是不是平衡二叉树别人的思路:
使用递归对于每一个点判断是否平衡点,所以需要一个计算此点深度的getDepth()方法int getDepth(TreeNode *node) { int left =0; int right=0; if (node == NULL) return 0; if (node->left != NULL) left = getDepth(node->left); if (node->right != NULL) right = getDepth(node->right); return (left > right? left : right) + 1; } bool isBalanced(TreeNode* root) { if (root == NULL) return true; if (abs(getDepth(root->left) - getDepth(root->right)) > 1) return false; return (isBalanced(root->left) && isBalanced(root->right)); }
我的思路:
这题我的方法beat 80%,虽然也不是很多但是是我个人的新高啊!而且看起来简洁很多有木有!
class Solution { public: bool isBalanced(TreeNode* root) { bool the = true; //这里这个布尔值the,之后作为引用传入的,之所以作为引用是因为我希望在不断的递归中一直用the来存储是否仍旧满足平衡树条件 btree(0,root,the); return the; } int btree(int i,TreeNode* node, bool &the){ //btree是返回此树的深度的 if(node == NULL || the == false) return i; //如果该节点为NULL,说明递归到底了,可以返回,或者前面已经判断存在 非平衡状态了,那么之后就其实没必要递归了,也直接返回 int left = btree(i+1,node->left,the); int right = btree(i+1,node->right,the); if(left-right > 1 || right-left > 1) the = false; //计算出左右节点的深度,如果绝对值大于1,则the置为false,the是引用,可以想象成全局的 return max(left,right); //此节点的高度为子节点最大值 } };
Tips:
在思考算法的时候,我进了一个坑,那就是想存储所有叶子结点的大小,然后比较最大值和最小值差值是否大于1.
但是这是错误的思路,因为一个节点的深度是其 最大深度
比如一个节点
左边,最深是 5
右边,最深是 4,但是存在 3 的子节点
此节点是平衡的,但是存在 5-3 > 1
相关文章推荐
- GBDT(MART) 迭代决策树入门教程 | 简介
- 描绘用户场景
- Linux 目录结构
- Centos下使用yum安装MariaDB
- 动态规划 中级题解 路径记录
- python中操作数据库中游标的使用方法
- mysql unique option prefix myisam_recover instead of myisam-recover-options的解决方法
- 【BZOJ2875】[Noi2012]随机数生成器【矩阵快速幂】
- UITextField限制输入字数高亮状态下输入框内真实类容与textFiled(解决中文输入问题)
- 列出一些你常见的运行时异常(非检查异常)?
- Redis Cluster 实现细节
- 浙大 PAT Advanced level 1020. Tree Traversals (25)
- 能不能对metronic继续封装一下呢
- springmvc表单验证
- ThreadLocal源码分析
- c++语法——类和对象的学习(1)
- markdown和 html相比有什么区别
- 使用ThreadLocal解决多线程的并发问题
- 跨终端Web之Hybrid App开发对比
- Oracle安装临时客户端使用总结