public void search(int v) {
		// ʾ

		p = root;
		if (p == null) {
			Message.AtLeastOneElement();
			return;
		}

		state = State.search;
		data = v;
		while (p != null) {
			int i;
			for (i = 1; i <= p.numOfElements; i++) {
				p.ElementHighlightIdx = i;
				repaint();
				paintAll(getGraphics());
				try {
					Thread.sleep(TIME);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				// ҵԪ
				if (p.value[i] == v) {
					p.ElementHighlightIdx = -1;
					p.lineHighlightIdx = -1;
					state = State.searched;
					repaint();
					paintAll(getGraphics());
					// Message.EndSearch();
					return;
				}
				if (p.value[i] > v)
					break;
			}
			state = State.go;
			// p½ʵλ
			if (i <= p.numOfElements) {
				p.lineHighlightIdx = i - 1;
				node = i;
				repaint();
				paintAll(getGraphics());
				try {
					Thread.sleep(TIME);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				p.lineHighlightIdx = -1;
				repaint();
				paintAll(getGraphics());
				p = p.children[i - 1];
			} else {
				p.lineHighlightIdx = p.numOfElements;
				node = p.numOfElements;
				repaint();
				paintAll(getGraphics());
				try {
					Thread.sleep(TIME);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				p.lineHighlightIdx = -1;
				repaint();
				paintAll(getGraphics());
				p = p.children[p.numOfElements]; // ֹԽ
			}

		}

		// ȻδҵԻ
		Message.NoSuchElement(v);

		state = State.searched;
		repaint();
		paintAll(getGraphics());
	}