二叉树的平衡检查

《程序员面试金典》中的一道题

      实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。

我是用java通过的

这是树节点的定义:

public class TreeNode {

    int val = 0;

    TreeNode left = null;

    TreeNode right = null;

    public TreeNode(int val) {

        this.val = val;

    }

}

思路:

要想判定平衡二叉树是否成立,关键在于其左右节点的高度相差是否小于等于1 ;

所以定义一个求每个节点高度的方法

采用递归

public int height(TreeNode root, int h){

        if (root ==null)

            return 0 ;

        int l = height(root.left , h); //获得当前节点的左节点的高度

        int r = height(root.right , h); //获取当前节点的右节点的高度

        h = (l > r ? l : r)+1 ; //找出最大高度+1 

        return h;

    }

高度的问题解决了,现在就剩下比较每个节点的左右节点的高度了

依旧是采用递归方式

public boolean isBalance(TreeNode root) {

    if (root ==null)

        return true ;

    int h =0 ;

    int l =0 ;

    h = height(root.left , h);

    l = height(root.right , l);

    if (h-l<-1 || h-l >1)

            return false ;

    return isBalance(root.left) && isBalance(root.right);

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容