@Override
	protected boolean validateNode(Node<T> node) {
		boolean bst = super.validateNode(node);

		if (!bst)
			return false;

		AVLNode<T> avlNode = (AVLNode<T>) node;
		int balanceFactor = avlNode.getBalanceFactor();

		if (balanceFactor > 1 || balanceFactor < -1) {
			return false;
		}
		if (avlNode.isLeaf()) {
			if (avlNode.height != 1)
				return false;
		} else {
			AVLNode<T> avlNodeLesser = (AVLNode<T>) avlNode.lesser;
			int lesserHeight = 1;

			if (avlNodeLesser != null)
				lesserHeight = avlNodeLesser.height;

			AVLNode<T> avlNodeGreater = (AVLNode<T>) avlNode.greater;
			int greaterHeight = 1;

			if (avlNodeGreater != null)
				greaterHeight = avlNodeGreater.height;

			if (avlNode.height == (lesserHeight + 1)
					|| avlNode.height == (greaterHeight + 1))
				return true;

			return false;
		}
		return true;
	}