Algorithms_二叉树的层次遍历(广度优先)
生活随笔
收集整理的這篇文章主要介紹了
Algorithms_二叉树的层次遍历(广度优先)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 使用樹理解深度優(yōu)先和廣度優(yōu)先
- 層次遍歷分析
- Code
使用樹理解深度優(yōu)先和廣度優(yōu)先
我們上篇博文中 Algorithms_二叉樹的前序遍歷、中序遍歷、后續(xù)遍歷(深度優(yōu)先) ,本質(zhì)上是深度優(yōu)先。 為什么這么說呢? 我們來看下
5 / \ 3 6 / \ \ 2 4 8前序遍歷: 5 、3、2、4、6、8
中序遍歷: 2、3、4、5、6、8
后序遍歷 : 2、4、3、8、6、5
不管是前序、中序還是后序都會(huì)先把左子樹遍歷到?jīng)]有元素,然后再遍歷右子樹到?jīng)]有元素, 都是先順著一個(gè)枝杈往最深的地方走。
而層次遍歷呢? (廣度優(yōu)先)
5 先遍歷第0層的數(shù)據(jù)--------------------------------------- / \ 3 6 然后遍歷第1層的數(shù)據(jù)---------------------------------------/ \ \ 2 4 8 再遍歷第2層的數(shù)據(jù)---------------------------------------層次遍歷的輸出如下: 5、3、6、2、4、8
我們遍歷的數(shù)據(jù)使用逐層遍歷的方式,本質(zhì)上是一種廣度優(yōu)先的遍歷。
層次遍歷分析
層次遍歷的方式,通常使用的不是遞歸的方式來實(shí)現(xiàn)的,一般都會(huì)借用隊(duì)列。 從根節(jié)點(diǎn)開始排著隊(duì)的進(jìn)入到隊(duì)列中
5 先遍歷第0層的數(shù)據(jù)--------------------------------------- / \ 3 6 然后遍歷第1層的數(shù)據(jù)---------------------------------------/ \ \ 2 4 8 再遍歷第2層的數(shù)據(jù)---------------------------------------我們逐步來分析一下
Code
/*** * * @Title: levelScan* * @Description: 二分搜索樹的層序遍歷* * * @return: void*/public void levelScan() {Queue<Node> queue = new LinkedList<>();queue.offer(root);// 把root入隊(duì)while (!queue.isEmpty()) {Node currentNode = queue.remove();// 移除并返回System.out.println(currentNode.e);if (currentNode.left != null) {queue.add(currentNode.left);}if (currentNode.right != null) {queue.add(currentNode.right);}}}測試下
public static void main(String[] args) {BinarySearchTree<Integer> bst = new BinarySearchTree<>();int[] nums = { 5, 3, 6, 8, 4, 2 };for (int num : nums) {bst.add(num);}// bst.preOrder();// System.out.println("============================");// bst.preOrderNR();// System.out.println("============================");bst.levelScan();}總結(jié)
以上是生活随笔為你收集整理的Algorithms_二叉树的层次遍历(广度优先)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Algorithms_二叉树的前序遍历、
- 下一篇: LeetCode_349. 两个数组的交