判断一个树是否为平衡二叉树

1 什么是平衡二叉树?

左子树和右子树的高度不能超过1 的书就叫平衡二叉树。

2 解题思路

先序遍历 ,获取左子树的高度和 获取右子树的高度 然后比较高度差 ,如何高度大于1 返回flase,否则返回true,并递归该过程。

3 代码实现

/**
 * 判断一个树是否为平衡二叉树
 * @author Administrator
 *
 */
public class Code_06_IsBalancedTree {

    public static class Node {
        public int value;
        public Node left;
        public Node right;

        public Node(int data) {
            this.value = data;
        }
    }

    public static boolean isBalance(Node head) {
        boolean[] res = new boolean[1];
        res[0] = true;
        getHeight(head, 1, res);
        return res[0];
    }
    /**
     * 先序遍历  平衡二叉树 左右子树高度相差不超过1
     * @param head
     * @param level
     * @param res
     * @return
     */
    public static int getHeight(Node head, int level, boolean[] res) {
        if (head == null) {
            return level;
        }
        int lH = getHeight(head.left, level + 1, res);//左子树的高度
        if (!res[0]) {
            return level;
        }
        int rH = getHeight(head.right, level + 1, res);//右子树高度
        if (!res[0]) {
            return level;
        }
        if (Math.abs(lH - rH) > 1) {//左右子树高度差值
            res[0] = false;
        }
        return Math.max(lH, rH);
    }

    public static void main(String[] args) {
        Node head = new Node(1);
        head.left = new Node(2);
//      head.right = new Node(3);
        head.left.left = new Node(4);
        head.left.right = new Node(5);
//      head.right.left = new Node(6);
//      head.right.right = new Node(7);

        System.out.println(isBalance(head));

    }

}

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

相关阅读更多精彩内容

友情链接更多精彩内容