【每日一題】【佇列初始化&工具類&層次遍歷無需遞迴】2022年1月29日-NC14 按之字形順序列印二叉樹
阿新 • • 發佈:2022-01-29
描述
給定一個二叉樹,返回該二叉樹的之字形層序遍歷,(第一層從左向右,下一層從右向左,一直這樣交替)
注意:樹的初始化
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