208. Implement Trie (Prefix Tree)

class Node {
	final static int the_maxsize = 26;
	Node[] list = new Node[the_maxsize];
	char data;
	boolean isEnd = false;                                                 //用isEnd 代替isSelf  节约空间
}

class Trie {
	Node node = new Node();
	/** Initialize your data structure here. */
	public Trie() {}

	/** Inserts a word into the trie. */
	public void insert(String word) {
		Node temp = node;
		char[] c = word.toCharArray();
		for (int i = 0; i < c.length; i++) {
			int loc = c[i] - 'a';
			if (temp.list[loc] == null) {
				temp.list[loc] = new Node();
				temp.list[loc].data = c[i];
			}
			temp = temp.list[loc];
		}
		temp.isEnd = true;
	}

	/** Returns if the word is in the trie. */
	public boolean search(String word) {
		if (word == null)
			return false;
		Node temp = node;
		char[] c = word.toCharArray();
		for (int i = 0; i < c.length; i++) {
			int loc = c[i] - 'a';
			if (temp.list[loc] != null)  temp = temp.list[loc];
			else return false;
		}
		if (temp.isEnd ) return true;
		else return false;
	}

	/**
	 * Returns if there is any word in the trie that starts with the given prefix.
	 */
	public boolean startsWith(String prefix) {
		Node temp = node;
		char[] c = prefix.toCharArray();
		for (int i = 0; i < c.length; i++) {
			int loc = c[i] - 'a';
			if (temp.list[loc] != null)
				temp = temp.list[loc];
			else
				return false;
		}
		return true;
	}
}
原文地址:https://www.cnblogs.com/cznczai/p/11332208.html