leetcode--BalancedBinaryTree
2015-06-12 09:36
447 查看
平衡二叉树:
左右子树深度差的绝对值不大于一,且左右子树为平衡二叉树。
/**
* Created by marsares on 15/6/12.
*/
public class BalancedBinaryTree {
boolean isBalanced=true;
public boolean isBalanced(TreeNode root) {
if(root==null)return true;
getDepth(root);
return isBalanced;
}
private int getDepth(TreeNode root){
if(root.left==null&&root.right==null)return 1;
else if(root.left==null){
int rightDepth=getDepth(root.right);
if(rightDepth>1)isBalanced=false;
return rightDepth+1;
}
else if(root.right==null){
int leftDepth=getDepth(root.left);
if(leftDepth>1)isBalanced=false;
return leftDepth+1;
}
else{
int leftDepth=getDepth(root.left);
int rightDepth=getDepth(root.right);
if(leftDepth-rightDepth>1||leftDepth-rightDepth<-1)isBalanced=false;
return max(leftDepth,rightDepth)+1;
}
}
private int max(int a,int b){
return (a<b)?b:a;
}
public static void main(String[]args){
TreeNode t1=new TreeNode(5);
TreeNode t2=new TreeNode(3);
TreeNode t3=new TreeNode(10);
TreeNode t4=new TreeNode(2);
TreeNode t5=new TreeNode(1);
TreeNode t6=new TreeNode(4);
TreeNode t7=new TreeNode(7);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t6;
t4.left=t5;
t3.left=t7;
BalancedBinaryTree bbt=new BalancedBinaryTree();
System.out.println(bbt.isBalanced(t1));
}
}
左右子树深度差的绝对值不大于一,且左右子树为平衡二叉树。
/**
* Created by marsares on 15/6/12.
*/
public class BalancedBinaryTree {
boolean isBalanced=true;
public boolean isBalanced(TreeNode root) {
if(root==null)return true;
getDepth(root);
return isBalanced;
}
private int getDepth(TreeNode root){
if(root.left==null&&root.right==null)return 1;
else if(root.left==null){
int rightDepth=getDepth(root.right);
if(rightDepth>1)isBalanced=false;
return rightDepth+1;
}
else if(root.right==null){
int leftDepth=getDepth(root.left);
if(leftDepth>1)isBalanced=false;
return leftDepth+1;
}
else{
int leftDepth=getDepth(root.left);
int rightDepth=getDepth(root.right);
if(leftDepth-rightDepth>1||leftDepth-rightDepth<-1)isBalanced=false;
return max(leftDepth,rightDepth)+1;
}
}
private int max(int a,int b){
return (a<b)?b:a;
}
public static void main(String[]args){
TreeNode t1=new TreeNode(5);
TreeNode t2=new TreeNode(3);
TreeNode t3=new TreeNode(10);
TreeNode t4=new TreeNode(2);
TreeNode t5=new TreeNode(1);
TreeNode t6=new TreeNode(4);
TreeNode t7=new TreeNode(7);
t1.left=t2;
t1.right=t3;
t2.left=t4;
t2.right=t6;
t4.left=t5;
t3.left=t7;
BalancedBinaryTree bbt=new BalancedBinaryTree();
System.out.println(bbt.isBalanced(t1));
}
}
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解
- LeetCode 2: Add Two Numbers (JAVA)
- LeetCode 1: Two Sum (JAVA)