如何判断一颗二叉树是否是平衡二叉树
一、什么是平衡二叉树
定义:对于任何一个子树来说,它左右数的高度差的绝对值不超过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); } }