Leetcode107. 二叉樹的層序遍歷 II
阿新 • • 發佈:2021-09-06
Leetcode107. 二叉樹的層序遍歷 II
題目描述
/**
*
* 給定一個二叉樹,返回其節點值自底向上的層序遍歷。
*
* (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
*/
思路分析
- 二叉樹的層序遍歷,及一層一層的遍歷二叉樹,將每一層遍歷的結果儲存到集合中
- 因此需要維護一個佇列儲存每層的節點,然後遍歷這些節點,取值並將它的子節點再記錄到佇列中
- 因為是自底向上的層序遍歷,因此要將每層遍歷的節點值新增到集合的首部
- 詳解程式碼見下
原始碼及分析
/** * @param root 根節點 * @return 返回層序遍歷的結果 */ public List<List<Integer>> levelOrderBottom(TreeNode root) { //定義集合儲存結果,注意新增結果時要新增到集合的頭部 LinkedList<List<Integer>> res = new LinkedList<>(); //資料校驗 if (root == null) { return res; } //維護一個佇列儲存每一層的節點 Queue<TreeNode> nodes = new LinkedList<>(); nodes.offer(root); while (!nodes.isEmpty()){ //建立集合儲存每一層的節點值 ArrayList<Integer> level = new ArrayList<>(); //記錄每一層的節點數,用於遍歷 int size = nodes.size(); //遍歷每一層的節點,記錄節點值,並記錄下一層子節點 for (int i = 0; i < size; i++) { TreeNode node = nodes.poll(); level.add(node.val); if (node.left != null){ nodes.offer(node.left); } if (node.right != null){ nodes.offer(node.right); } } //將每一層結果倒序新增 res.add(0,level); } return res; }