1. 程式人生 > 其它 >【每日一題】【佇列初始化&工具類&層次遍歷無需遞迴】2022年1月29日-NC14 按之字形順序列印二叉樹

【每日一題】【佇列初始化&工具類&層次遍歷無需遞迴】2022年1月29日-NC14 按之字形順序列印二叉樹

描述
給定一個二叉樹,返回該二叉樹的之字形層序遍歷,(第一層從左向右,下一層從右向左,一直這樣交替)

注意:樹的初始化

public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }

類似:連結串列的初始化

public class LinkNode {
    int val;
    LinkNode next = null;  
    
public LinkNode(int val) { this.val = val; } }

方法1:普通佇列進行層次遍歷,隔層使用一次工具類進行翻轉

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }

}
*/
public class Solution {
    
/** 使用佇列實現層次遍歷(先進先出) 層次遍歷判斷每一層元素個數不用遞迴,可以直接看queue的size **/ public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if(pRoot == null) { return res; } Queue
<TreeNode> queue = new LinkedList<>(); queue.offer(pRoot); int index = 0; while(!queue.isEmpty()) { int size = queue.size(); ArrayList<Integer> arr = new ArrayList<>(); for(int i = 0; i < size; i++) { TreeNode node = queue.poll(); arr.add(node.val); if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } } if(index % 2 != 0) { Collections.reverse(arr); } index++; res.add(arr); } return res; } }

注意:佇列的初始化是new LinkedList<>();

本文來自部落格園,作者:哥們要飛,轉載請註明原文連結:https://www.cnblogs.com/liujinhui/p/15854541.html