public class BFS {
public static void bfs(Node root){
if(root == null){
return;
}
Queue queue = new Queue();
queue.poll(root);
queue.poll(new Node("flag"));
while(queue.peek() != null){
Node node = (Node)queue.offer();
if(node.id == null){
System.out.print(node.value + " ");
if(node.left != null){
queue.poll(node.left);
}
if(node.right != null){
queue.poll(node.right);
}
}else{
if(!queue.isEmpty()){
queue.poll(new Node("flag"));
System.out.println();
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
int[] a = {7,2,4,8,3,5,1,9,0,6};
bt.buildTree(a);
bt.printTree();
BFS.bfs(bt.root);
}
}
上面的方法,至少需要保存某一层的节点,随着树的增长,消耗的内存会翻倍增长,如果内存受限,怎样做。
迭代搜索。内存取决于树的深度。牺牲时间换空间。