leetcode103-二叉樹的鋸齒形層序遍歷

二叉樹的鋸齒形層序遍歷

給定一個(gè)二叉樹,返回其節(jié)點(diǎn)值的鋸齒形層序遍歷。(即先從左往右,再?gòu)挠彝筮M(jìn)行下一層遍歷,以此類推,層與層之間交替進(jìn)行)。

例如:

給定二叉樹 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回鋸齒形層序遍歷如下:

[
  [3],
  [20,9],
  [15,7]
]

思路:

依然使用隊(duì)列,不過要用雙端隊(duì)列了,每一層出隊(duì)列和添加新元素進(jìn)入隊(duì)列的順序都和上一層相反,用一個(gè)標(biāo)志表示即可。

代碼:

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res=new ArrayList<>();
        Deque<TreeNode> deque =new ArrayDeque<>();
        //這個(gè)表示隊(duì)列中當(dāng)前層的節(jié)點(diǎn)是否從下面出雙端隊(duì)列
        boolean isDown =true;
        if(root==null){return res;}
        deque.add(root);
        while(deque.size()!=0){
            List<Integer> list=new ArrayList<>();
            int num=deque.size();
            if(isDown){
                for(int i=0;i<num;i++){
                    TreeNode node=deque.pollLast();
                    list.add(node.val);
                    if(node.left!=null){deque.addFirst(node.left);}
                    if(node.right!=null) {deque.addFirst(node.right); }
                }
            }
            else{
                for(int i=0;i<num;i++){
                    TreeNode node=deque.pollFirst();
                    list.add(node.val);
                    if(node.right!=null) {deque.addLast(node.right); }
                    if(node.left!=null){deque.addLast(node.left);}
                }
            }
            res.add(list);
            isDown=!isDown;
        }
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容