美文网首页
判断一棵二叉树是否是平衡二叉树

判断一棵二叉树是否是平衡二叉树

作者: Ramsey16k | 来源:发表于2019-11-27 10:54 被阅读0次

    思路:
    递归方式判断,返回的信息应该有两个:
    (1)这棵树是否是平衡的
    (2)这棵树的高度为多少

    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 class ReturnData {
            public boolean isB; // 是否平衡
            public int h; // 高度
    
            public ReturnData(boolean isB, int h) {
                this.isB = isB;
                this.h = h;
            }
        }
    
        public static ReturnData process(Node head) {
            if (head == null) { // 空树是平衡的
                return new ReturnData(true, 0);
            }
            ReturnData leftData = process(head.left);
            if (!leftData.isB) { // 左子树不平衡,返回false
                return new ReturnData(false, 0);
            }
            ReturnData rightData = process(head.right);
            if (!rightData.isB) { // 右子树不平衡,返回false
                return new ReturnData(false, 0);
            }
            if (Math.abs(leftData.h - rightData.h) > 1) {
                //左子树和右子树的高度查大于1,返回false
                return new ReturnData(false, 0);
            }
            //节点的高度 = 左子树和右子树中较大的那个高度 + 1
            return new ReturnData(true, Math.max(leftData.h, rightData.h) + 1);
        }
    
        public static boolean isB(Node head){
            // 判断是否是平衡二叉树
            return process(head).isB;
        }
    
        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(isB(head));
        }
    }
    

    相关文章

      网友评论

          本文标题:判断一棵二叉树是否是平衡二叉树

          本文链接:https://www.haomeiwen.com/subject/uavvwctx.html