二叉树的广度优先搜索无法匹配先中后序遍历任何一种方式,实际上就是按每一层结点进行搜索。我们可以借助于集合作为每一层的中间变量进行操作。 eg:
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode ( int val, TreeNode left, TreeNode right) {
this . val = val;
this . left = left;
this . right = right;
}
public TreeNode ( int val) {
this . val = val;
}
}
public static boolean bfs ( TreeNode root, int target) {
ArrayList< TreeNode> roots = new ArrayList < > ( ) ;
roots. add ( root) ;
return bfs ( roots, target) ;
}
public static boolean bfs ( ArrayList< TreeNode> roots, int target) {
if ( roots == null || roots. size ( ) == 0 ) return false ;
ArrayList< TreeNode> childRoots = new ArrayList < > ( ) ;
for ( TreeNode temp : roots) {
if ( temp. val == target) return true ;
if ( temp. left != null ) childRoots. add ( temp. left) ;
if ( temp. right != null) childRoots. add ( temp. right) ;
}
return bfs ( childRoots, target) ;
}
public class Main {
public static void main ( String[ ] args) {
TreeNode node1 = new TreeNode ( 1 ) ;
TreeNode node2 = new TreeNode ( 2 ) ;
TreeNode node3 = new TreeNode ( 3 ) ;
TreeNode node4 = new TreeNode ( 4 ) ;
TreeNode node5 = new TreeNode ( 5 ) ;
TreeNode node6 = new TreeNode ( 6 ) ;
TreeNode node7 = new TreeNode ( 7 ) ;
node1. left = node2;
node1. right = node3;
node2. left = node4;
node2. right = node5;
node3. right = node6;
node4. right = node7;
System. out. println ( bfs ( node1, 4 ) ) ;
System. out. println ( bfs ( node1, 8 ) ) ;
}