110.Balanced Binary Tree---《剑指offer》面试39
题目大意:判断一个二叉树是否是平衡二叉树。
法一:dfs。利用求解二叉树的高度延伸,先计算左子树的高度,再计算右子树的高度,然后两者进行比较。o(nlgn)。代码如下(耗时4ms):
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true;
}
//计算左子树高度
int l = dfs(root.left);
//计算右子树高度
int r = dfs(root.right);
//比较左子树和右子树高度
if(Math.abs(l - r) > 1) {
return false;
}
//如果左右子树有非平衡二叉树,则整体就是平衡二叉树,否则就不是
return isBalanced(root.left) && isBalanced(root.right);
}
//计算二叉树的高度
private int dfs(TreeNode root) {
if(root == null) {
return 0;
}
int l = dfs(root.left);
int r = dfs(root.right);
return (l > r) ? (l + 1) : (r + 1);
}
法二:dfs。每个结点只遍历一次,也就是边遍历,边记录其深度。o(n)。代码如下(耗时2ms):
public boolean isBalanced(TreeNode root) {
return (dfs(root) == -1) ? false : true;
}
private int dfs(TreeNode root) {
if(root == null) {
return 0;
}
//记录左子树高度
int l = dfs(root.left);
//如果左子树是非平衡树,则直接返回-1,不用进行下面的操作
if(l == -1) {
return -1;
}
//记录右子树高度
int r = dfs(root.right);
if(r == -1) {
return -1;
}
//比较左右子树的高度,如果是非平衡的,则返回-1
if(Math.abs(l - r) > 1) {
return -1;
}
//如果目前来说是平衡的,则返回当前平衡树的高度
else {
return 1 + Math.max(l, r);
}
}
110.Balanced Binary Tree---《剑指offer》面试39的更多相关文章
- C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...
- 剑指offer 面试39题
面试39题: 题目:数组中出现次数超过一半的数字 题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- 110.Balanced Binary Tree Leetcode解题笔记
110.Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...
- 110. Balanced Binary Tree - LeetCode
Question 110. Balanced Binary Tree Solution 题目大意:判断一个二叉树是不是平衡二叉树 思路:定义个boolean来记录每个子节点是否平衡 Java实现: p ...
- 剑指offer 面试5题
面试5题: 题目:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 方法一: # -*- co ...
- 剑指offer 面试8题
面试8题: 题目:二叉树的下一个节点 题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路:详见剑 ...
- 剑指offer 面试10题
面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1 ...
- 剑指offer 面试11题
面试11题: 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4 ...
随机推荐
- context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置
- httpservlet在创建实例对象时候默认调用有参数的init方法 destroy()方法 service方法, 父类的init方法给子类实例一个config对象
- AC自动机裸题
HDU 2222 Keywords Search 模板题.对模式串建立AC自动机然后在trie树上找一遍目标串即可. # include <cstdio> # include <cs ...
- 使用canvas控制gif图片的播放与暂停
if ('getContext' in document.createElement('canvas')) { HTMLImageElement.prototype.play = function() ...
- 求熵 python 代码
#coding=gbk import nltk import math def entropy(labels): freqdist = nltk.FreqDist(labels) #Frequency ...
- POJ2135:Farm Tour——题解
http://poj.org/problem?id=2135 题目大意: 从1到n再回来,每条边只能走一次,问最短路. —————————————————— 如果不告诉我是费用流打死不会想这个…… 我 ...
- 关于PDO取得结果集的数据类型为string的问题
很久没写些什么了, 正好今天工作中遇到了以前在意过的问题. 之前曾注意到过,php从数据库中取得的结果集后,其中的字段全都会变成string类型.今儿通过ajax调取数据, 有一个type字段是int ...
- 1 Easy Read/Write Splitting with PHP’s MySQLnd
以下均是使用翻译软件翻译的! Note: This is part one in our Extending MySQL with PHP's MySQLnd Series, read part 2 ...
- Codeforces Round #407 (Div. 2) D,E
图论 D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- HDU1914 稳定婚姻匹配
The Stable Marriage Problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (J ...