树——判断是否为平衡二叉树
2016-05-10 20:52
239 查看
题目:balanced-binary-tree
判断一棵二叉树是否为平衡二叉树,即二叉树的每个结点的两棵子树的高度差不大于一。
后序遍历二叉树,每遍历一个节点判断时候满足平衡条件,并存储该节点深度。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
int[]deepth={0};//存储该节点的深度;
return isBalanced(root,deepth);
}
public boolean isBalanced(TreeNode root,int[]deepth)
{
if(root == null)
return true;
int []left={0};
int []right={0};
if(isBalanced(root.left,left)&&isBalanced(root.right,right))//判断条件的时候一定要仔细,不能随便return
{
if(Math.abs(left[0]-right[0])<=1)
{
deepth[0]=left[0]>right[0]?left[0]+1:right[0]+1;//该节点的深度公式,+1是精髓;
return true;
}
}
return false;
}
判断一棵二叉树是否为平衡二叉树,即二叉树的每个结点的两棵子树的高度差不大于一。
后序遍历二叉树,每遍历一个节点判断时候满足平衡条件,并存储该节点深度。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
int[]deepth={0};//存储该节点的深度;
return isBalanced(root,deepth);
}
public boolean isBalanced(TreeNode root,int[]deepth)
{
if(root == null)
return true;
int []left={0};
int []right={0};
if(isBalanced(root.left,left)&&isBalanced(root.right,right))//判断条件的时候一定要仔细,不能随便return
{
if(Math.abs(left[0]-right[0])<=1)
{
deepth[0]=left[0]>right[0]?left[0]+1:right[0]+1;//该节点的深度公式,+1是精髓;
return true;
}
}
return false;
}
相关文章推荐
- int main(int argc,char* argv[]),int main(int argc,char** argv)
- linux启动是自动加载的几个文件说明bashrc等 .
- C# + WinForm + EmguCV 学习二:创建和操作图片
- C语言 旋转数组的最小数字
- Android:获取屏幕信息(宽高)的代码
- qt5.0串口写数据返回为-1的问题
- acm_十进制转二进制
- snmpsharpnet的Trap实例
- C# 泛型
- tensorflow implementation of latest papers
- HDOJ 2582 f(n) (YY+找规律)
- CDOJ 1041 Hug the princess 【思维】
- 适配器 BaseAdapter 类
- NYOJ - 170 网络的可靠性
- HDU 5316 Magician (区结合并)
- handler消息机制 小结
- C++第五次实验
- [改善Java代码]建议采用的顺序是 List<T>、List<?>、List<Object>
- fzoj Problem 1894 志愿者选拔 【单调队列】
- Linux 64位下一键安装scipy等科学计算环境