在Java的面試中,二叉樹的遍歷是一個常見的算法主題。本文將介紹一道經(jīng)典的Java面試題——二叉樹的層序遍歷,并提供詳細的解析和解題思路。
題目
給定一個二叉樹,按照層序遍歷的順序輸出節(jié)點的值。
解析與解題思路
二叉樹的層序遍歷是一種廣度優(yōu)先搜索(BFS)的應用,可以使用隊列來實現(xiàn)。
- 創(chuàng)建一個隊列,并將根節(jié)點入隊。
- 當隊列不為空時,重復以下步驟:彈出隊首節(jié)點,輸出其值。將彈出節(jié)點的左子節(jié)點入隊(如果存在)。將彈出節(jié)點的右子節(jié)點入隊(如果存在)。
- 重復步驟2直到隊列為空。
以下是Java代碼實例:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class LevelOrderTraversal {
public static void levelOrderTraversal(TreeNode root) {
if (root == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(node.val + " "); // 輸出當前節(jié)點的值
if (node.left != null) {
queue.offer(node.left); // 將左子節(jié)點入隊
}
if (node.right != null) {
queue.offer(node.right); // 將右子節(jié)點入隊
}
}
}
public static void main(String[] args) {
/*
* 構造二叉樹:
* 1
* / \
* 2 3
* / \
* 4 5
*/
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
System.out.print("層序遍歷結(jié)果:");
levelOrderTraversal(root);
}
}
輸出結(jié)果:
層序遍歷結(jié)果:1 2 3 4 5
結(jié)論
通過廣度優(yōu)先搜索(BFS)算法,我們可以實現(xiàn)二叉樹的層序遍歷。層序遍歷按照從上到下、從左到右的順序遍歷二叉樹的節(jié)點,是一種常見且重要的遍歷方式。掌握了解題思路和實現(xiàn)代碼,我們能夠在面試中更加自信地回答相關問題。
學java,就到java編程獅!