【编程题】平衡二叉树(Java实现)
题目来源
剑指offer第39题
https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
题目代码
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null)
return true;
if(isBalace(root)!=-1)
return true;
else
return false;
}
int isBalace(TreeNode root){
if(root==null)
return 0;
if(isBalace(root.left)==-1)
return -1;
if(isBalace(root.right)==-1)
return -1;
int left=isBalace(root.left);
int right=isBalace(root.right);
if(Math.abs(left-right)>1)
return -1;
return left>right?left+1:right+1;
}
}
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return isBalanced_Solution(root).isBalance;
}
public ReturnData isBalanced_Solution(TreeNode root){
if(root==null){
return new ReturnData(true,0);
}
ReturnData leftReturnData=isBalanced_Solution(root.left);
if(!leftReturnData.isBalance){
return new ReturnData(false,0);
}
ReturnData rightReturnData=isBalanced_Solution(root.right);
if(!rightReturnData.isBalance){
return new ReturnData(false,0);
}
if(Math.abs(leftReturnData.hight-rightReturnData.hight)>1){
return new ReturnData(false,0);
}
return new ReturnData(true,Math.max(leftReturnData.hight,rightReturnData.hight)+1);
}
}
class ReturnData{
boolean isBalance;
int hight;
public ReturnData(boolean isBalance,int hight){
this.isBalance=isBalance;
this.hight=hight;
}
}