private void Dfs(char[][] board, BoardTrieNode parent, int row, int col, List <string> result) { if (board == null || board.Length == 0 || board[0].Length == 0 || parent == null || result == null) { return; } if (parent.Children.ContainsKey(BoardTrieNode.LeafChar) && !string.IsNullOrEmpty(parent.Children[BoardTrieNode.LeafChar].Word)) { result.Add(parent.Children[BoardTrieNode.LeafChar].Word); parent.Children[BoardTrieNode.LeafChar].Word = string.Empty; } if (row < 0 || row >= board.Length || col < 0 || col >= board[0].Length) { return; } char ch = board[row][col]; if (!parent.Children.ContainsKey(ch)) { return; } if (ch == VisitingChar) { return; } board[row][col] = VisitingChar; if (!parent.Children.ContainsKey(ch)) { return; } Dfs(board, parent.Children[ch], row - 1, col, result); Dfs(board, parent.Children[ch], row + 1, col, result); Dfs(board, parent.Children[ch], row, col - 1, result); Dfs(board, parent.Children[ch], row, col + 1, result); board[row][col] = ch; }
private void Insert(BoardTrieNode node, char[] charArray, int startIndex) { if (node == null || charArray == null || charArray.Length == 0 || startIndex < 0 || startIndex > charArray.Length) { return; } if (startIndex == charArray.Length) { node.Children[BoardTrieNode.LeafChar] = new BoardTrieNode(BoardTrieNode.LeafChar); node.Children[BoardTrieNode.LeafChar].Word = new string(charArray); } else { char ch = charArray[startIndex]; if (!node.Children.ContainsKey(ch)) { node.Children[ch] = new BoardTrieNode(ch); } Insert(node.Children[ch], charArray, startIndex + 1); } }
public BoardTrie() { Root = new BoardTrieNode(BoardTrieNode.RootChar); }