【leetcode】110.(Easy)Balanced Binary Tree

解题思路:
递归
创建一个类用于保存子树是否平衡以及子树的高度。如果子树不平衡直接返回false。如果子树平衡对比左右子树的高度再返回结果。


提交代码:

class BandN{
	boolean B;
	int N;
	BandN(boolean B,int N){
		this.B=B;
		this.N=N;
	}
}

	class Solution {
	    public boolean isBalanced(TreeNode root) {
	        if(root==null)	return true;
	        
	        BandN left=balanceTree(root.left);
	        if(!left.B)	return false;
	        BandN right=balanceTree(root.right);
	        if(!right.B)	return false;
	
	        return Math.abs(left.N-right.N)<2?true:false;
	    }
	    
	    private BandN balanceTree(TreeNode root) {
	    	BandN result=new BandN(true,0);
	    	if(root==null) {
	    		return result;
	    	}
	    	
	    	BandN left=balanceTree(root.left);
	        if(!left.B) {
	        	result.B=false;
	        	return result;
	        }
	    	BandN right=balanceTree(root.right);
	    	if(!right.B) {
	    		result.B=false;
	        	return result;
	        }
	        
	        if(Math.abs(left.N-right.N)<2) {
	        	result.N=Math.max(left.N, right.N)+1;
	        	return result;
	        }
	        else {
	        	result.B=false;
	        	return result;
	        }
	    }
	}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/85336346