二叉树平衡检查

1、题目内容

二叉树平衡检查

实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。

 给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡

2、题目解析

平衡二叉树:对于树中的任意一个结点,其两颗子树的高度差不超过1。

实现一个求树的高度(深度)的方法,判断左右子树高度差是否大于1。

实现一个求树的高度(深度)的方法的代码:

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; //左右子树高度的最大值在加1就是树的高度。
}

实现判断二叉树是否为平衡二叉树的代码如下:

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class Balance {
    public boolean isBalance(TreeNode root) {
        // write code here
        if(root==null) return true;
        int left = depth(root.left);
        int right = depth(root.right);
        int dif = left-right;
        if(dif>1||dif<-1)return false;
        return isBalance(root.left)&&isBalance(root.right);//判断左右子树是否平衡
    }
    public int depth(TreeNode root){
        if(root==null){
            return 0;
        }
        int left = depth(root.left);
        int right = depth(root.right);
        return (left>right)?left+1:right+1;
    }
}


你可能感兴趣的:(二叉树平衡检查)