1. 程式人生 > 資訊 >LG 釋出 OLED EX 技術:亮度提升 30%,螢幕邊框更小

LG 釋出 OLED EX 技術:亮度提升 30%,螢幕邊框更小

對於這種問題,我們第一個需要考慮的問題是:如何對二叉樹進行層次遍歷。可以使用佇列來對二叉樹進行層次遍歷,先將根結點入隊,然後進入while迴圈,每次出隊一個節點進行操作,然後把它對應的左節點和右節點入隊(注意順序不能變)

  然後,我們第二個需要考慮的問題是:怎麼樣把遍歷次數限制在一行內。如果我們不進行特殊處理的話,遍歷的順序是:3,9,20,15,7。 但是我們現在需要的是 [3] [20,9] [15,7],也就是每次只能遍歷一行。 為了解決這個問題,我們可以在 while迴圈中 加入一個 for迴圈,這樣就可以把遍歷限制在一行裡

            for(int i=q.size();i>0;i--){ //q.size()是初始化條件
                TreeNode p 
= q.poll(); list.add(p.val); //對節點進行操作 if(p.left!=null){ q.add(p.left); } if(p.right!=null){ q.add(p.right); } }

  接著,我們第三個需要考慮的問題是:如何反轉list中的元素。我們根據題目要求,偶數次的遍歷需要反著來。對於這個問題,我們可以用 Collections 的 reverse方法

,使list中的元素逆轉(注意List是一個介面,我們可以用 ArrayList實現類)

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        int count=1;//從第一次遍歷開始
        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> q = new LinkedList<>();
        
if(root!=null){ q.add(root); //根節點入隊 } while(!q.isEmpty()){ List<Integer> list = new ArrayList<>(); for(int i=q.size();i>0;i--){ //限制遍歷次數 TreeNode p = q.poll(); list.add(p.val); if(p.left!=null){ q.add(p.left); } if(p.right!=null){ q.add(p.right); } } if(count%2==0){ Collections.reverse(list); //需要特殊處理的行 } res.add(list); count++; } return res; } }