一,問題描述
實現二叉樹的層序遍歷--從根開始,依次向下,對於每一層從左向右遍歷。
二,算法分析
層序遍歷與先序、中序、后序遍歷不同。層序遍歷用到了隊列,而先、中、后序需要用到棧。
因此,先、中、后序遍歷 可以 采用遞歸方式來實現,而層序遍歷則沒有遞歸方式。
算法步驟:
初始時,根結點入隊列
然后,while循環判斷隊列不空時,彈出一個結點,訪問它,並把它的所有孩子結點入隊列。
三,代碼實現
1 public void levelTraverse(BinarySearchTree<T> tree){ 2 levelTraverse(tree.root); 3 } 4 private void levelTraverse(BinaryNode<T> root){ 5 if(root == null) 6 return; 7 8 Queue<BinaryNode<T>> queue = new LinkedList<>();//層序遍歷時保存結點的隊列 9 queue.offer(root);//初始化 10 while(!queue.isEmpty()){ 11 BinaryNode<T> node = queue.poll(); 12 System.out.print(node.element + " ");//訪問節點 13 if(node.left != null) 14 queue.offer(node.left); 15 if(node.right != null) 16 queue.offer(node.right); 17 } 18 }
二叉搜索樹的完整實現代碼參考:
或者參考: