BFS和DFS相关题目
1.1 解法一:BFS
public List < List < Integer > > levelOrder ( TreeNode root) {
if ( root== null ) return new ArrayList < > ( ) ;
List < List < Integer > > result = new ArrayList < > ( ) ;
Deque < TreeNode > deque = new LinkedList < > ( ) ;
deque. addLast ( root) ;
while ( ! deque. isEmpty ( ) ) {
int n = deque. size ( ) ;
List < Integer > list = new ArrayList < > ( n) ;
for ( int i= 0 ; i< n; i++ ) {
TreeNode node = deque. pop ( ) ;
list. add ( node. val) ;
if ( node. left!= null ) deque. addLast ( node. left) ;
if ( node. right!= null ) deque. addLast ( node. right) ;
}
result. add ( list) ;
}
return result;
}
2.1 解法一:BFS
public int minMutation ( String start, String end, String [ ] bank) {
Set < String > bankSet = new HashSet < > ( Arrays . asList ( bank) ) ;
char [ ] dir = {
'A' , 'C' , 'G' , 'T' } ;
bankSet. remove ( start) ;
Set < String > visited = new HashSet < > ( ) ;
Deque < String > deque = new LinkedList < > ( ) ;
deque. addLast ( start) ;
visited. add ( start) ;
int res = 0 ;
while ( ! deque. isEmpty ( ) ) {
int n = deque. size ( ) ;
for ( int i= 0 ; i< n; i++ ) {
String str = deque. pop ( ) ;
if ( str. equals ( end) ) return res;
char [ ] a = str. toCharArray ( ) ;
for ( int j= 0 ; j< a. length; j++ ) {
char old = a[ j] ;
for ( char c: dir) {
if ( old== c) continue ;
a[ j] = c;
String s = String . valueOf ( a) ;
if ( bankSet. contains ( s) && ! visited. contains ( s) ) {
visited. add ( s) ;
deque. addLast ( s) ;
}
a[ j] = old;
}
}
}
res++ ;
}
return - 1 ;
}
3.1 解法一:BFS + 验证
public List<String> generateParenthesis(int n) {
List<String> result =new ArrayList<>();
Deque<String> deque = new LinkedList<>();
deque.addLast("");
int level = 0, h = n * 2;
while (level<h) {
int size = deque.size();
for (int i=0; i<size; i++) {
String s = deque.pop();
deque.addLast(s+"(");
deque.addLast(s+")");
}
level++;
}
while(!deque.isEmpty()) {
String s = deque.pop();
if (valid(s))