1、判断一颗二叉树是不是平衡/搜索/完全二叉树
平衡二叉树: 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
搜索二叉树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
判断是是否平衡二叉树:用递归,遍历每一个节点,自定义一个返回类型,包括是不是平衡树和数的高度
- 如果左子树不是平衡二叉树,直接返false
- 如果右子树不是平衡二叉树,直接返false
- 如果左右子树都是平衡二叉树,单数左右字数高度大于1,返false
- 其他,返回true
package cn.nupt;
/**
* @Description: 判断一个二叉树是否是平衡二叉树 平衡二叉树:是一
* 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
* @author PizAn
* @Email pizan@foxmail.com
* @date 2019年3月4日 下午6:15:48
*
*/
public class IsBalancedTree {
// 我们这里用递归做,每一个点都递归到,每一个点作为头节点返回它是不是平衡二叉树和它的高度,这里自定义一个返回类型
// 定义二叉树
public static class Node {
private Node left;
private Node right;
private Integer value;
public Node(Integer value) {
this.value = value;
}
}
// 这里我们定义一个返回类型的自建类
public static class ReturnType {
private boolean isBalance; // 是否是平衡二叉树
private int height; // 以这棵树为头节点的二叉树的高度
public ReturnType(boolean isBalance, int height) {
this.isBalance = isBalance;
this.height = height;
}
}
public static ReturnType isBalanceTree(Node head) {
if (head == null) {
return new ReturnType(