剑指offer——平衡二叉树的判定
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
我的解法:利用求二叉树的深度判断平衡二叉树
解法一:递归判断
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null){
return true;
}
int leftDeep=treeDepth(root.left);
int rightDeep=treeDepth(root.right);
int diff=leftDeep-rightDeep;
if(diff>1 || diff<-1){
return false;
}else{
return true;
}
}
public int treeDepth(TreeNode root){
if(root==null){
return 0;
}
int left=treeDepth(root.left);
int right=treeDepth(root.right);
return left>right?left+1:right+1;
}
}
解法二:利用非递归解法
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null){
return true;
}
int leftDeep=treeDeep(root.left);
int rightDeep=treeDeep(root.right);
int diff=leftDeep-rightDeep;
if(diff>1 || diff<-1){
return false;
}else{
return true;
}
}
public int treeDeep(TreeNode root){
if(root==null){
return 0;
}
int deep=0,count=0,curentCount=1;
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode p=queue.poll();
count++;
if(p.left!=null){
queue.add(p.left);
}
if(p.right!=null){
queue.add(p.right);
}
if(count==curentCount){
curentCount=queue.size();
count=0;
deep++;
}
}
return deep;
}
}
参考学习: Java——求二叉树的深度