leetcode二叉樹-層序遍歷
阿新 • • 發佈:2021-12-13
利用佇列儲存下一層結構
不會,我可以學;落後,我可以追趕;跌倒,我可以站起來!package binarytree.levelOrder.inordertraversal; import binarytree.untils.GenerateTreeNode; import binarytree.untils.TreeNode; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; /** * 102. 二叉樹的層序遍歷 * 給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。 * <p> * <p> * <p> * 示例: * 二叉樹:[3,9,20,null,null,15,7], * <p> * 3 * / \ * 9 20 * / \ * 15 7 * 返回其層序遍歷結果: * <p> * [ * [3], * [9,20], * [15,7] * ] */ public class LevelOrder { /** * 層序遍歷 * <p> * 1,2,3,4,5,6,7,8,9 * <p> * 1,2,3,4,5,6,7,8,9 * <p> * 思路,一層一層遍歷,一邊構建佇列,一邊記錄上一層的數字 * * @param root * @return */ public static List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> re = new ArrayList<>(); if (root == null) { return re; } Queue<TreeNode> queue = new LinkedList(); queue.offer(root); while (!queue.isEmpty()) { List<Integer> res = new ArrayList<>(); int size = queue.size();//這裡要用變數,否則 queue是動態變化的,無法確定迴圈次數 for (int i = 0; i < size; i++) { TreeNode treeNode = queue.poll(); res.add(treeNode.val); if (treeNode.left != null) { queue.add(treeNode.left); } if (treeNode.right != null) { queue.add(treeNode.right); } } re.add(res); } return re; } public static void main(String[] args) { Integer[] nums = {1, 2, 3, 4, 5, 6, 7}; TreeNode treeNode = GenerateTreeNode.generateTreeNode(nums); levelOrder(treeNode); System.out.println(); } }