93. 平衡二叉树

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 

样例

样例  1:
	输入: tree = {1,2,3}
	输出: true
	
	样例解释:
	如下,是一个平衡的二叉树。
		  1  
		 / \                
		2  3

	
样例  2:
	输入: tree = {3,9,20,#,#,15,7}
	输出: true
	
	样例解释:
	如下,是一个平衡的二叉树。
		  3  
		 / \                
		9  20                
		  /  \                
		 15   7 

	
样例  2:
	输入: tree = {1,#,2,3,4}
	输出: false
	
	样例解释:
	如下,是一个不平衡的二叉树。1的左右子树高度差2
		  1  
		   \                
		   2                
		  /  \                
		 3   4
	

输入测试数据 (每行一个参数)如何理解测试数据?

 

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */

public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: True if this Binary tree is Balanced, or false.
     */
    public boolean isBalanced(TreeNode root) {
        // write your code here
        if (root==null){
            return true;
        }else{
            return checkNode(root);
        }
    }
    

   //判断是否平衡的函数
    public boolean checkNode(TreeNode root){
       if (root==null){
           return true;
       } 

       //判断左节点
       if (!checkNode(root.left)){
           return false;
       } 

       //判断右节点
       if (!checkNode(root.right)){
           return false;
       }

       //调用getDepth函数得到左右子树的深度
       int left=getDePth(root.left);  
       int right=getDePth(root.right);
       //abs函数求绝对值
       if(Math.abs(left-right)>1){
            return false;
        }else{
            return true;
        }
    }
    

     
    public int getDePth(TreeNode root){
        if(root==null) {
            return 0;
        }
            
        int a=getDePth(root.left);
        int b=getDePth(root.right);

        return Math.max(a, b)+1;
    }
}

 

输入

查看差别

{1,2,3}

输出

true

期望答案

true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值