zoukankan      html  css  js  c++  java
  • 如何判断一颗二叉树是否是平衡二叉树

    一、什么是平衡二叉树

    定义:对于任何一个子树来说,它左右数的高度差的绝对值不超过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);
        }
    
    }
  • 相关阅读:
    HDU1205 吃糖果【水题】
    HDU2568 前进【水题】
    架构图初体验
    五层架构
    文件系统权限设计涉及范畴
    微服务
    领域驱动设计
    容器技术Docker
    架构总结
    仓储模式的简单理解
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/15132880.html
Copyright © 2011-2022 走看看