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); } } 上面的方法,至少需要保存某一层的节点,随着树的增长,消耗的内存会翻倍增长,如果内存受限,怎样做。 迭代搜索。内存取决于树的深度。牺牲时间换空间。