如何判断一颗二叉树是否是平衡二叉树

一、什么是平衡二叉树

定义:对于任何一个子树来说,它左右数的高度差的绝对值不超过1

 二、二叉树的递归套路

在求解二叉树问题的时候,列可能性:假设可以向左/右树要信息的情况下,利用左右树的信息解决问题。

例如:

如果一个二叉树是平衡二叉树,列举可能性:

1)左子树是平衡二叉树

2)右子树是平衡二叉树

3) |左高-右高| <=1

只有以上三个条件都满足才是平衡二叉树

 代码实现

package Algorithms.tree;

public class IsBalancedTree {

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

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

    //主函数
    public static boolean isBalanced(Node head) {
        return process(head).isBalanced;
    }

    //定义返回值的类型:1、返回当前的树是不是平衡的  2、返回当前树的高度
    public static class ReturnType {
        public boolean isBalanced;
        public int height;

        public ReturnType(boolean isB, int hei) {
            isBalanced = isB;
            height = hei;
        }
    }


    public static ReturnType process(Node x) {
        if (x == null) { //空树
            return new ReturnType(true, 0);
        }
        //获取左右数信息
        ReturnType leftData = process(x.left); //返回左树是否为平衡二叉树以及其高度
        ReturnType rightData = process(x.right); //返回右树是否为平衡二叉树以及其高度

        //利用左右树信息返回整个树的高度
        int height = Math.max(leftData.height, rightData.height);
        //利用左右树信息判断是否是平衡二叉树
        boolean isBalanced = leftData.isBalanced && rightData.isBalanced
                && Math.abs(leftData.height - rightData.height) < 2;
        return new ReturnType(isBalanced, height);
    }

}

 

posted @ 2021-08-12 15:46  zh_小猿  阅读(587)  评论(0编辑  收藏  举报