1. 程式人生 > 實用技巧 >[CF1439C] Greedy Shopping - 貪心,線段樹,二分

[CF1439C] Greedy Shopping - 貪心,線段樹,二分

題目:從上到下按層列印二叉樹,同一層的節點按從左到右的順序列印,每一層列印到一行。
解法:廣度優先搜尋
思路:使用佇列,佇列存放的是當前某一層的所有節點,所以出隊時同時把節點加入到list中,那麼這個list存放的將是某一層的所有節點
程式碼:
/**

  • Definition for a binary tree node.
  • public class TreeNode {
  • int val;
    
  • TreeNode left;
    
  • TreeNode right;
    
  • TreeNode(int x) { val = x; }
    
  • }
    */
    class Solution {
    public List<List> levelOrder(TreeNode root) {
    if(root==null){
    return new ArrayList();
    }
    List<List> res = new ArrayList();
    Queue queue = new LinkedList(); //佇列
    queue.offer(root); //根結點入隊
    while(!queue.isEmpty()){
    List list = new ArrayList();
    for(int i=queue.size();i>0;i--){ //注意不能0到size-1,因為size會改變
    TreeNode t = queue.poll();
    list.add(t.val);
    if(t.left!=null){
    queue.offer(t.left);
    }
    if(t.right!=null){
    queue.offer(t.right);
    }
    }
    res.add(list);
    }
    return res;
    }
    }
    注意:佇列判空和list判空都不能使用xxx != null,而應使用isEmpty,isEmpty是判斷內容是否為空