树——判断是否为平衡二叉树
来源:互联网 发布:usb电流测试软件 编辑:程序博客网 时间:2024/06/02 07:01
题目: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; }
方法二:
利用求二叉树深度函数deepth,在遍历每个结点的时候,调用deepth函数得到左右树的深度看相差是否在1以内。
代码如下:
public class Solution { public boolean isBalanced(TreeNode root) { if(root == null) return true; boolean result=false;//不能写在函数外,否则返回的全是true; if(Math.abs(deepth(root.left)-deepth(root.right))<=1) { result=true; } if(result == true&&root.left!=null) result=isBalanced(root.left); if(result == true&&root.left!=null) result=isBalanced(root.right); return result; } public int deepth(TreeNode root) { if(root == null) return 0; if(root.left == null&&root.right == null) return 1; return deepth(root.left)>deepth(root.right)?deepth(root.left)+1:deepth(root.right)+1; }}
0 0
- 树——判断是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断二差树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断一颗树是否为平衡二叉树
- handler消息机制 小结
- linux启动是自动加载的几个文件说明bashrc等 .
- HDOJ 2582 f(n) (YY+找规律)
- tensorflow implementation of latest papers
- int main(int argc,char* argv[]),int main(int argc,char** argv)
- 树——判断是否为平衡二叉树
- Unity打包Android备忘
- snmpsharpnet的Trap实例
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- Android:获取屏幕信息(宽高)的代码
- 程序员日常
- C语言 旋转数组的最小数字
- c++实验五—数组分离
- 同步协议简单介绍