《剑指offer》面试题55 - II. 平衡二叉树
问题描述
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
    3
   / \
  9  20
    /  \
   15   7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
返回 false 。
限制:
1 <= 树的结点个数 <= 10000
代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(!root)return true;
        int left,right;
        left  = depth(root->left);
        right = depth(root->right);
        if(abs(left - right) < 2)
            return isBalanced(root->left)&&isBalanced(root->right);
        else
            return false;
    }
    int depth(TreeNode *root)
    {
        if(root == NULL)return 0;
        return max(depth(root->left),depth(root->right))+1;
    }
};
结果
执行用时 :24 ms, 在所有 C++ 提交中击败了42.16%的用户
内存消耗 :21.4 MB, 在所有 C++ 提交中击败了100.00%的用户
代码2
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(!root)return true;
        return depth(root)>=0;
    }
    int depth(TreeNode *root)
    {
        if(root == NULL)return 0;
        int left,right;
        left  = depth(root->left);
        right = depth(root->right);
        if(left >= 0 && right >= 0 && abs(right-left) < 2)
            return max(left,right)+1;
        else
            return -1;
    }
};
结果
执行用时 :24 ms, 在所有 C++ 提交中击败了42.16%的用户
内存消耗 :21.6 MB, 在所有 C++ 提交中击败了100.00%的用户
《剑指offer》面试题55 - II. 平衡二叉树的更多相关文章
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
		剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ... 
- 【剑指Offer面试题】 九度OJ1389:变态跳楼梯
		转自:http://www.myexception.cn/program/1973966.html 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2331解决:1332 题目描述: 一只青蛙一次 ... 
- 剑指 Offer 14- II. 剪绳子 II
		剑指 Offer 14- II. 剪绳子 II 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]... ... 
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
		问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ... 
- 剑指offer面试题3  二维数组中的查找(c)
		剑指offer面试题三: 
- 剑指Offer——笔试题+知识点总结
		剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ... 
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
		剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ... 
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
		剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ... 
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
		剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ... 
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
		剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ... 
随机推荐
- LuoguP4419 [COCI2017-2018#1] Cezar 题解
			Content 有一个牌库,有一些点数为 \(1\sim 11\) 的牌,其中除了点数为 \(10\) 的牌有 \(16\) 张之外,其余点数的牌各有四张.现在玩一个游戏,已经拿出了 \(n\) 张牌 ... 
- JAVA微信支付——微信公众号内支付 代码
			官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 微信PC二维码支付方式参考:https://www.cnblogs. ... 
- cmake全面教程
			1. 官网教程 2. 中文教程 3. Modern CMake 
- 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)
			[LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ... 
- Andrey and Problem
			B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ... 
- hdu-1299 Diophantus of Alexandria(分解素因子)
			思路: 因为x,y必须要大与n,那么将y设为(n+k);那么根据等式可求的x=(n2)/k+n;因为y为整数所以k要整除n*n; 那么符合上面等式的x,y的个数就变为求能被n*n整除的数k的个数,且k ... 
- CHARACTERIZING ADVERSARIAL SUBSPACES USING LOCAL INTRINSIC DIMENSIONALITY
			目录 概 主要内容 LID LID估计 算法 实验 1 2 3 4 5 Ma X, Li B, Wang Y, et al. Characterizing Adversarial Subspaces ... 
- linux系统安装java
			1.下载Java压缩包 *.gz 2.解压 3.修改Linux配置文件,配置Java环境变量 4.使用命令source /etc/profile让修改生效 转载 https://www.cnblogs ... 
- 如何下载安装JDBC_jar包,MySQL_JDBC_jar包的下载与使用(Windows)
			一. 下载 (1) 打开MySQL_JDBC的下载网站:https://dev.mysql.com/downloads/connector/j/ (2) 选择操作系统:Platform Indepen ... 
- Log4j2进阶使用(Pattern Layout详细设置)
			1.进阶说明 通过配置Layout打印格式化的日志, Log4j2支持很多的Layouts: CSV GELF HTML JSON Pattern Serialized Syslog XML YAML ... 
